我在我的网站的<title>中使用了HTML5和UTF-8的“&”符号。谷歌在其serp上显示与号fine,所有浏览器在其标题中也是如此。
http://validator.w3.org给了我这个:
&没有开始字符引用。(&可能应该被转义为&。)
我真的需要做&
我并不在意我的页面为了验证而验证,但我很好奇人们对这个问题的看法,以及它是否重要以及为什么重要。
我在我的网站的<title>中使用了HTML5和UTF-8的“&”符号。谷歌在其serp上显示与号fine,所有浏览器在其标题中也是如此。
http://validator.w3.org给了我这个:
&没有开始字符引用。(&可能应该被转义为&。)
我真的需要做&
我并不在意我的页面为了验证而验证,但我很好奇人们对这个问题的看法,以及它是否重要以及为什么重要。
当前回答
如果&在HTML中使用,那么你应该转义它。
如果&在JavaScript字符串中使用,例如,一个警报('This & that');或文档。你不需要用它。
如果你使用文档。写完之后你就应该使用它,例如:document。写(< p >,< / p >)。
其他回答
HTML5规则不同于HTML4。在HTML5中它不是必需的——除非&号看起来像一个参数名的开头。"©=2"仍然是一个问题,例如,因为©是版权符号。
然而,在我看来,决定编码或不编码取决于下面的文本是更困难的工作。所以最简单的方法就是一直编码。
这取决于分号在&附近结束的可能性,导致它显示完全不同的内容。
例如,当处理来自用户的输入时(例如,如果在标题标签中包含用户提供的论坛帖子的主题),您永远不知道他们可能会在哪里放置随机分号,并且可能会随机显示奇怪的实体。所以在这种情况下一定要逃避。
当然,对于您自己的静态HTML内容,您可以跳过它,但是包含适当的转义太琐碎了,因此没有理由避免它。
如果用户将它传递给您,或者它将在URL中结束,您需要转义它。
如果它以静态文本的形式出现在页面上?所有浏览器都能正确地处理这个问题,您不必太担心,因为它可以工作。
如果你说的是静态文本
<title>Foo & Bar</title>
存储在硬盘上的某个文件中并直接由服务器提供,那么是的:它可能不需要转义。
然而,由于现在很少有HTML内容是完全静态的,我将添加以下免责声明,假设HTML内容是从其他来源生成的(数据库内容、用户输入、web服务调用结果、遗留API结果,……):
如果你不转义一个简单的&,那么很可能你也不转义&或a 或<b>或<script src="http://attacker.com/evil.js">或任何其他无效文本。这意味着您最多只能错误地显示您的内容,并且更有可能受到XSS攻击。
换句话说:当您已经检查和转义其他更有问题的情况时,那么几乎没有理由留下没有完全损坏但仍然有点可疑的独立&未转义的情况。
该链接有一个很好的例子,说明了你何时以及为什么需要转义&到&
https://jsfiddle.net/vh2h7usk/1/
有趣的是,我不得不转义字符,以便在这里的回答中正确地表示它。如果我要使用内置的代码示例选项(来自回答面板),我只需输入&看起来也应该如此。但如果我手动使用<code></code>元素,那么我必须转义,以便正确地表示它:)