我在我的网站的<title>中使用了HTML5和UTF-8的“&”符号。谷歌在其serp上显示与号fine,所有浏览器在其标题中也是如此。
http://validator.w3.org给了我这个:
&没有开始字符引用。(&可能应该被转义为&。)
我真的需要做&
我并不在意我的页面为了验证而验证,但我很好奇人们对这个问题的看法,以及它是否重要以及为什么重要。
我在我的网站的<title>中使用了HTML5和UTF-8的“&”符号。谷歌在其serp上显示与号fine,所有浏览器在其标题中也是如此。
http://validator.w3.org给了我这个:
&没有开始字符引用。(&可能应该被转义为&。)
我真的需要做&
我并不在意我的页面为了验证而验证,但我很好奇人们对这个问题的看法,以及它是否重要以及为什么重要。
当前回答
在HTML中,&标记引用的开始,无论是字符引用还是实体引用。从那时起,解析器期望一个表示字符引用的#,或者一个表示实体引用的实体名称,两者后跟一个;。这是正常的行为。
但如果引用名或引用开头的&后面跟着空格或其他分隔符,如",',<,>,&,则结尾;甚至一个表示普通符号的引用&也可以省略:
<p title="&">foo & bar</p>
<p title="&">foo & bar</p>
<p title="&">foo & bar</p>
只有在这些情况下,才能结束;或者甚至引用本身被省略(至少在HTML 4中)。我认为HTML 5需要结尾;。
但是规范建议总是使用字符引用&或者实体引用&为了避免混淆:
作者应该使用“&”(ASCII十进制38)而不是“&”,以避免与字符引用(实体引用打开分隔符)的开头混淆。作者还应该在属性值中使用“&”,因为CDATA属性值中允许使用字符引用。
其他回答
在HTML中,&标记引用的开始,无论是字符引用还是实体引用。从那时起,解析器期望一个表示字符引用的#,或者一个表示实体引用的实体名称,两者后跟一个;。这是正常的行为。
但如果引用名或引用开头的&后面跟着空格或其他分隔符,如",',<,>,&,则结尾;甚至一个表示普通符号的引用&也可以省略:
<p title="&">foo & bar</p>
<p title="&">foo & bar</p>
<p title="&">foo & bar</p>
只有在这些情况下,才能结束;或者甚至引用本身被省略(至少在HTML 4中)。我认为HTML 5需要结尾;。
但是规范建议总是使用字符引用&或者实体引用&为了避免混淆:
作者应该使用“&”(ASCII十进制38)而不是“&”,以避免与字符引用(实体引用打开分隔符)的开头混淆。作者还应该在属性值中使用“&”,因为CDATA属性值中允许使用字符引用。
好吧,如果它来自用户输入,那么绝对是,因为显而易见的原因。想想如果这个网站没有这样做:这个问题的标题会显示为:我真的需要将“&”编码为“&”吗?
如果它只是echo '<title>Dolce & Gabbana</title>';严格来说,你不需要这么做。这样会更好,但如果你不这样做,没有用户会注意到区别。
这取决于分号在&附近结束的可能性,导致它显示完全不同的内容。
例如,当处理来自用户的输入时(例如,如果在标题标签中包含用户提供的论坛帖子的主题),您永远不知道他们可能会在哪里放置随机分号,并且可能会随机显示奇怪的实体。所以在这种情况下一定要逃避。
当然,对于您自己的静态HTML内容,您可以跳过它,但是包含适当的转义太琐碎了,因此没有理由避免它。
HTML5规则不同于HTML4。在HTML5中它不是必需的——除非&号看起来像一个参数名的开头。"©=2"仍然是一个问题,例如,因为©是版权符号。
然而,在我看来,决定编码或不编码取决于下面的文本是更困难的工作。所以最简单的方法就是一直编码。
如果&在HTML中使用,那么你应该转义它。
如果&在JavaScript字符串中使用,例如,一个警报('This & that');或文档。你不需要用它。
如果你使用文档。写完之后你就应该使用它,例如:document。写(< p >,< / p >)。