(X)HTML中的保留字符有哪些?

4

是的,我已经谷歌过了,令人惊讶的是得到了混淆的答案。

这个页面< > & "是(X)HTML中唯一的保留字符。毫无疑问,这是有道理的。

这个页面< > & " '是(X)HTML中的保留字符。有点困惑,但还好,这也是有道理的。

然后这个页面< > & " © ° £和不间断空格(&nbsp)都是(X)HTML中的保留字符。这根本没有任何意义,而且更加增加了我的困惑。

能否有真正了解这些内容的知识渊博的人澄清一下(X)HTML中实际上哪些是保留字符

编辑: 另外,当代码被包裹在<pre>标签中时,所有保留字符都应该被转义吗?还是只有这三个 -- < > & ??


2
<pre>在解析方面没有特殊的含义。 - Quentin
@Quentin 嗯...你说得对。 - its_me
1
请注意,你提到的所有链接都是错误的!例如,在 XML 中,"< > & " ' "是特殊字符,因为它们有实体名称;但是它们不像那些网页所认为的那样是“保留字符”。 - Mr Lister
5个回答

10
XHTML 1.0规范在http://www.w3.org/TR/2002/REC-xhtml1-20020801/#xhtml中指出:
XHTML 1.0[...]是将三种HTML 4文档类型重新制定为XML 1.0 [XML]应用程序。
XML 1.0规范在http://www.w3.org/TR/2008/REC-xml-20081126/#syntax中指出:
字符数据和标记:文本由交错的字符数据和标记组成。[...] &(&)和左尖括号(<)必须不以它们的字面形式出现,除非它们用作标记分隔符或在注释、处理指令或CDATA部分内。如果它们在其他地方需要使用,则必须使用数字字符引用或字符串"&amp;"和"&lt;"进行转义。右尖括号(>)可以使用字符串"&gt;"表示,并且必须为了兼容性而转义,当它出现在内容中的字符串"]]>"时,当该字符串不标记CDATA部分的结尾时,必须使用"&gt;"或字符引用进行转义。
这意味着在编写XHTML文档的文本部分时,您必须转义 &、< 和 >。
可以转义更多内容,例如将ü转义为带有分音符的u。您也可以声明文档以UTF-8编码,并编写字节序列0xc3bc以获得相同的带有分音符的u。
在编写文档的元素部分(列“标记”)时,有不同的规则。您必须注意"、'和许多关于注释、CDATA等的规则。还有规则规定哪些字符可以用于元素和属性名称。您可以在XML规范中查找它,但归根结底,对于元素和属性名称,请使用字母、数字和"-";请勿使用"_"。对于属性值,您必须转义 & 和(根据引号样式)' 或 "。
如果您使用许多库来编写XML / XHTML文档,则其他人已经处理了此问题,您只需告诉库编写文本或元素即可。所有转义都是在后台完成的。

7

只有 <& 需要转义。在属性内,"'(取决于您在属性值中使用哪种引号样式)也需要进行转义。

<a href="#" onclick="here you can use ' safely"></a>
<a href="#" onclick='here you can use " safely'></a>

谢谢。但问题不仅仅是关于需要转义的内容,尽管这正是我想要的 :) 另外,您能否为我提供一个示例:在属性内部,也需要转义 " 或 '(取决于您用于属性值的引号样式) - its_me
好的,刚刚收到你的编辑。那么,实际上什么是保留字符?它们没有具体的数量吗? - its_me
3
取决于上下文。只有 <& 始终被称为“保留字符”。 - ThiefMaster

1
通过写“(X)HTML”,您至少在提出两个不同的问题。
按照HTML规则,其中“HTML”表示任何HTML版本,包括HTML 4.01,只有“<”和“&”是保留的。规则有些复杂。它们不应该字面上出现,除非在标签、实体引用和字符引用的句法使用中。但根据正式规则,它们可以字面上出现,例如在上下文“A&B”或“A<B”中(但A&B是正式错误的,A<B也是如此)。
基于XML的XHTML规则要求更严格,更简单:"<"和"&"是无条件保留的。
ASCII引号“和ASCII撇号'没有被保留,除了在特定意义上,即引用的属性值不能字面上包含用作引号的字符,即在“foo”中,字符串foo不能包含“本身,在'foo'中,字符串foo不能包含'本身。

我不理解这段话:但是按照正式规则,它们可以在文字上出现,例如在上下文中的“A&B”或“A < B”(但A&B在正式上是错误的,A<B也是如此)。 A&BA & B 有什么区别?同样,A<BA < B有何不同? - its_me
1
@geekpanth3r,区别在于和号或小于号后面跟的字符不同。在HTML中,当&后面不跟名称开始字符时,可以使用它,因此& B是可以的(下一个字符是空格),但&B不行(下一个字符是字母,&B将被解析为实体引用,然后发现未定义)。同样,< B在形式上是可以的,但<B将被解析为开始标记。 - Jukka K. Korpela
现在很有意义了。感谢您的解释! - its_me

0

0

XML格式保留了字符< > & "

  • 这意味着您只能使用<和>字符来定义标记(<mytag></mytag>)。

  • 双引号 (") 用于定义属性的值 (<mytag attribute="value" />)

  • &符号(&)用于写实体(在您实际想要写入&时使用&amp;,而不是使用&)。此外,在编写XML文档中的URL时,应该使用&amp;而不仅仅是&www.aaa.com?a=1&b=2- 是错误的,< code>www.aaa.com?a = 1&amp;b = 2- 是正确的!

XHTML基于XML,因此我所写的内容也适用于XHTML。

© ° £ - 这些不是保留字符。这些是专门为XHTML定义的实体,而不是为XML定义的。

在XML中,您可以简单地写入©。在XHTML中,您也可以简单地写入©,或使用实体&copy;或数字实体&00A9;

1
你应该使用Markdown。我已经为您正确格式化了答案。 :) 谢谢您的回答! - its_me

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接