【发布时间】:2011-11-07 02:48:14
【问题描述】:
什么是 HTML 和 XML 中的特殊保留字符实体?
我所说的信息:
HTML:
-
&(替换为&) -
<(替换为<) >(替换为>)-
"(替换为") '(替换为')
XML:
-
<(替换为<) -
>(替换为>) -
&(替换为&) -
'(替换为') -
"(替换为")
但是我找不到关于这些的文档。
W3C 在Extensible Markup Language (XML) 1.0 (Fifth Edition) 中确实提到了某些预定义的实体引用。但它说这些实体是预定义的(与© 预定义的方式相同);并不是说它们必须被转义:
4.6 Predefined Entities
[定义:实体和字符引用都可以用于 转义左尖括号、& 和其他分隔符。一套 为此指定了一般实体(amp、lt、gt、apos、quot) 目的。也可以使用数字字符引用;他们是 识别时立即展开,必须视为字符 数据,所以数字字符引用“<”和“&”可能 用于在字符数据中出现
HTML中哪些字符必须转义到实体引用中? 必须将哪些字符转义到 XML 中的实体引用中?
更新:
来自Extensible Markup Language (XML) 1.0 (Fifth Edition):
2.4 Character Data and Markup
& 字符 (
&amp;) 和左尖括号 (&lt;) 不得 以字面形式出现,除非用作标记分隔符, 或在注释、处理指令或 CDATA 部分中。 如果 它们在其他地方需要,它们必须使用任一数字进行转义 字符引用或字符串“&amp;”和“&lt;” 分别。右尖括号 (
&gt;) 可以使用 字符串“&gt;”和必须,为了兼容性,使用以下任一方法进行转义 “&gt;”或出现在字符串“]]>”中的字符引用 在内容中,当该字符串未标记 CDATA 部分的结尾时。为了允许属性值同时包含单引号和双引号,撇号或单引号字符 (
') 可以表示为“&apos;”,而双引号字符 (") 可以表示为“&quot;"。
我读过前者是这样说的
必须是:
-
&lt;(&lt;) 必须是 -
&amp;(&amp;) 必须是
可以,但在显示为]]>时必须
-
&gt;(&gt;) 必须是,如果显示为]]>
而且' 和" 根本不需要转义;除非你想在带引号的属性中加上引号。
来自HTML 4.01 Specification, HTML Document Representation:
5.3.2 Character entity references
希望在文本中添加“
&lt;”字符的作者应使用“&lt;” (ASCII 十进制 60)以避免可能与开头的混淆 标记(开始标记打开分隔符)。同样,作者应使用“
&gt;” (ASCII 十进制 62)在文本中而不是“&gt;”以避免旧的问题 用户代理错误地认为这是一个标签的结束(标签 关闭分隔符)出现在带引号的属性值中时。作者应使用“
&amp;”(ASCII 十进制 38)而不是“&amp;”以避免 与字符引用的开头混淆(实体 引用打开分隔符)。作者还应该使用“&amp;”在 属性值,因为 CDATA 中允许字符引用 属性值。有些作者使用字符实体引用“
&quot;”进行编码 双引号 (") 的实例,因为该字符可能是 用于分隔属性值。
HTML 在规则上更加空泛,但听起来我应该:
-
&lt;应与&lt; -
&gt;应该与&gt; -
&amp;应该与&amp; -
"应该与&quot;
如果" 可以是实体引用,我也应该将' 替换为&amp;。
更新二
来自HTML5 - A vocabulary and associated APIs for HTML and XHTML:
8.3 Serializing HTML fragments
转义字符串(出于上述算法的目的)包括 运行以下步骤:
用字符串“
&amp;”替换任何出现的“&amp;”字符。将所有出现的 U+00A0 NO-BREAK SPACE 字符替换为 字符串“
&nbsp;”。如果算法是在属性模式下调用的,则替换任何 字符串“
&quot;”出现的“"”字符。如果没有在属性模式下调用算法,则替换任何 字符串“
&lt;”出现的“&lt;”字符,以及任何 字符串“&gt;”出现“&gt;”字符。
我读为 HTML:
-
&amp;&amp;总是 -
&nbsp;总是 -
"&quot;如果它在属性内 -
&lt;by&lt;如果它不是在属性中(即属性可以包含&lt;) -
&gt;by&gt;如果它不是在属性中(即属性可以包含&gt;)
【问题讨论】:
-
你真的应该把你的问题和你的答案分开。
-
我没有答案。我的研究可能正确也可能不正确。知道答案的人可以发布它,如果它实际上是正确的,知道的人可以投票。
-
如果以上不是答案,那么您需要更清楚自己在寻找什么!
-
我找到了五个不同的来源,它们说了三种不同的东西。知道的人需要决定哪个来源是正确的,哪个是错误的。
-
奇怪的是,HTML 4 和 5 关于何时应该转义
&gt;(是否在属性中)的说法相反。
标签: xml http special-characters htmlspecialchars entityreference