我在我的网站的<title>中使用了HTML5和UTF-8的“&”符号。谷歌在其serp上显示与号fine,所有浏览器在其标题中也是如此。
http://validator.w3.org给了我这个:
&没有开始字符引用。(&可能应该被转义为&。)
我真的需要做&
我并不在意我的页面为了验证而验证,但我很好奇人们对这个问题的看法,以及它是否重要以及为什么重要。
我在我的网站的<title>中使用了HTML5和UTF-8的“&”符号。谷歌在其serp上显示与号fine,所有浏览器在其标题中也是如此。
http://validator.w3.org给了我这个:
&没有开始字符引用。(&可能应该被转义为&。)
我真的需要做&
我并不在意我的页面为了验证而验证,但我很好奇人们对这个问题的看法,以及它是否重要以及为什么重要。
当前回答
HTML5规则不同于HTML4。在HTML5中它不是必需的——除非&号看起来像一个参数名的开头。"©=2"仍然是一个问题,例如,因为©是版权符号。
然而,在我看来,决定编码或不编码取决于下面的文本是更困难的工作。所以最简单的方法就是一直编码。
其他回答
好吧,如果它来自用户输入,那么绝对是,因为显而易见的原因。想想如果这个网站没有这样做:这个问题的标题会显示为:我真的需要将“&”编码为“&”吗?
如果它只是echo '<title>Dolce & Gabbana</title>';严格来说,你不需要这么做。这样会更好,但如果你不这样做,没有用户会注意到区别。
更新(2020年3月):W3C验证器不再抱怨转义url。
我正在检查为什么图像url需要转义,因此在https://validator.w3.org中尝试了它。这个解释很好。它强调了即使是url也需要转义。[PS:我猜它将无法转义当它被消费,因为url需要&。有人能澄清一下吗?]
<img alt="" src="foo?bar=qut&qux=fop" />
An entity reference was found in the document, but there is no reference by that name defined. Often this is caused by misspelling the reference name, unencoded ampersands, or by leaving off the trailing semicolon (;). The most common cause of this error is unencoded ampersands in URLs as described by the WDG in "Ampersands in URLs". Entity references start with an ampersand (&) and end with a semicolon (;). If you want to use a literal ampersand in your document you must encode it as "&" (even inside URLs!). Be careful to end entity references with a semicolon or your entity reference may get interpreted in connection with the following text. Also keep in mind that named entity references are case-sensitive; &Aelig; and æ are different characters. If this error appears in some markup generated by PHP's session handling code, this article has explanations and solutions to your problem.
如果你说的是静态文本
<title>Foo & Bar</title>
存储在硬盘上的某个文件中并直接由服务器提供,那么是的:它可能不需要转义。
然而,由于现在很少有HTML内容是完全静态的,我将添加以下免责声明,假设HTML内容是从其他来源生成的(数据库内容、用户输入、web服务调用结果、遗留API结果,……):
如果你不转义一个简单的&,那么很可能你也不转义&或a 或<b>或<script src="http://attacker.com/evil.js">或任何其他无效文本。这意味着您最多只能错误地显示您的内容,并且更有可能受到XSS攻击。
换句话说:当您已经检查和转义其他更有问题的情况时,那么几乎没有理由留下没有完全损坏但仍然有点可疑的独立&未转义的情况。
除了验证之外,编码某些字符对于HTML文档来说是很重要的,这样它才能正确安全地呈现为网页。
编码& as &在任何情况下,对我来说,这是一个更容易遵守的规则,减少了错误和失败的可能性。
比较一下:哪个更容易?哪个更容易搞砸?
方法1
写一些包含&字符的内容。 将它们全部编码。
方法2
(请加一点盐;))
写一些包含&字符的内容。 在具体情况的基础上,查看每个&号。确定:
它是孤立的,因此毫无疑问是一个&号。如。伏特和安培>在这种情况下,就不用费心编码了。 它不是孤立的,但您仍然觉得它是明确的,因为生成的实体不存在,也永远不会存在,因为实体列表永远不会演化。例如,安培和伏特>。在这种情况下,不要费心编码它。 它不是孤立的,也不是模棱两可的。例如,电压和安培>编码。
??
如果&在HTML中使用,那么你应该转义它。
如果&在JavaScript字符串中使用,例如,一个警报('This & that');或文档。你不需要用它。
如果你使用文档。写完之后你就应该使用它,例如:document。写(< p >,< / p >)。