我在我的网站的<title>中使用了HTML5和UTF-8的“&”符号。谷歌在其serp上显示与号fine,所有浏览器在其标题中也是如此。
http://validator.w3.org给了我这个:
&没有开始字符引用。(&可能应该被转义为&。)
我真的需要做&
我并不在意我的页面为了验证而验证,但我很好奇人们对这个问题的看法,以及它是否重要以及为什么重要。
我在我的网站的<title>中使用了HTML5和UTF-8的“&”符号。谷歌在其serp上显示与号fine,所有浏览器在其标题中也是如此。
http://validator.w3.org给了我这个:
&没有开始字符引用。(&可能应该被转义为&。)
我真的需要做&
我并不在意我的页面为了验证而验证,但我很好奇人们对这个问题的看法,以及它是否重要以及为什么重要。
当前回答
除了验证之外,编码某些字符对于HTML文档来说是很重要的,这样它才能正确安全地呈现为网页。
编码& as &在任何情况下,对我来说,这是一个更容易遵守的规则,减少了错误和失败的可能性。
比较一下:哪个更容易?哪个更容易搞砸?
方法1
写一些包含&字符的内容。 将它们全部编码。
方法2
(请加一点盐;))
写一些包含&字符的内容。 在具体情况的基础上,查看每个&号。确定:
它是孤立的,因此毫无疑问是一个&号。如。伏特和安培>在这种情况下,就不用费心编码了。 它不是孤立的,但您仍然觉得它是明确的,因为生成的实体不存在,也永远不会存在,因为实体列表永远不会演化。例如,安培和伏特>。在这种情况下,不要费心编码它。 它不是孤立的,也不是模棱两可的。例如,电压和安培>编码。
??
其他回答
该链接有一个很好的例子,说明了你何时以及为什么需要转义&到&
https://jsfiddle.net/vh2h7usk/1/
有趣的是,我不得不转义字符,以便在这里的回答中正确地表示它。如果我要使用内置的代码示例选项(来自回答面板),我只需输入&看起来也应该如此。但如果我手动使用<code></code>元素,那么我必须转义,以便正确地表示它:)
好吧,如果它来自用户输入,那么绝对是,因为显而易见的原因。想想如果这个网站没有这样做:这个问题的标题会显示为:我真的需要将“&”编码为“&”吗?
如果它只是echo '<title>Dolce & Gabbana</title>';严格来说,你不需要这么做。这样会更好,但如果你不这样做,没有用户会注意到区别。
是的,如果可能的话,您应该尝试提供有效的代码。
大多数浏览器会无声地纠正这个错误,但是依赖浏览器中的错误处理存在一个问题。对于如何处理不正确的代码没有标准,因此每个浏览器供应商都要尝试找出如何处理每个错误,结果可能会有所不同。
一些浏览器可能会有不同反应的例子是,如果你把元素放在表格中,但在表格单元格之外,或者你把链接嵌套在彼此之间。
对于您的特定示例,它不太可能导致任何问题,但是浏览器中的错误更正可能会导致浏览器从标准兼容模式变为怪癖模式,这可能会使您的布局完全崩溃。
因此,您应该在代码中纠正这样的错误,如果没有其他错误,则可以使验证器中的错误列表保持简短,以便您可以发现更严重的问题。
几年前,我们收到一份报告,说我们的一个web应用程序在Firefox中不能正确显示。事实证明,该页面包含一个类似于
<div style="..." ... style="...">
当面对重复的样式属性时,Internet Explorer结合了这两种样式,而Firefox只使用其中一种,因此行为不同。我把标签改成了
<div style="...; ..." ...>
果然,它解决了问题!这个故事的寓意是,浏览器对有效HTML的处理比对无效HTML的处理更一致。所以,现在就修改你该死的加价吧!(或者使用HTML Tidy来修复它。)
是的。正如错误所示,在HTML中,属性是#PCDATA,这意味着它们被解析了。这意味着您可以在属性中使用字符实体。使用&本身是错误的,如果不是因为浏览器宽容,而且这是HTML而不是XHTML,就会破坏解析。转义为&一切都会好起来的。
HTML5允许你不转义它,但只有当后面的数据看起来不像一个有效的字符引用。但是,最好是忽略这个符号的所有实例,而不是担心哪些应该是,哪些不需要是。
记住这一点;如果你没有转义&到&,这对你创建的数据来说已经很糟糕了(代码很可能是无效的),你也可能没有转义标记分隔符,这对用户提交的数据来说是一个巨大的问题,这很可能导致HTML和脚本注入,cookie窃取和其他漏洞。
请转义你的代码。这将在将来为您省去很多麻烦。