W3C Validator在我的某些网址中引发了一个关于&符号的错误。例如:
<link href="min/?f=static/css/reset.css,static/css/main5.css&2" rel="stylesheet">
然而,根据HTML5 spec,验证器是错误的:
不明确的&符号是U + 0026 AMPERSAND字符(&amp;),后跟一个或多个字母数字ASCII字符,后跟一个U + 003B SEMICOLON字符(;),其中这些字符不匹配命名字符引用部分中给出的任何名称。
This site得出了相同的结论,并指出目前没有验证器正确实现规范。
这有什么确定性的吗?
答案 0 :(得分:4)
我相信你是对的 - 根据以下主题,这是a bug in the HTML5 validator。我不知道这是否是“权威性的”,因为它不是官方声明(但我认为答复中的名字至少是SO上信誉良好的成员)。
您尝试做的事情确实在HTML5中有效(在特定情况下,例如您的)。
以下是该错误报告的摘录供参考:
原帖帖子:
<img src="http://codx.altervista.org/scripts/php/image.phpimg=/membri/codx/grafica
/articles_covers/cover_t3dc1360866428.jpg&h=96" alt="Teeter 3D contesT" />
“简单地说,&amp;不必转义为
&
” - Source。
主题回答/解释:
这是正确的,在HTML5中。它说,它是验证器中的一个错误 否则,请参阅 http://lists.w3.org/Archives/Public/www-validator/2013Mar/0009.html。 验证器的不稳定开发版本, http://qa-dev.w3.org:8888/已修复此错误(以及您的文档 在其中验证。)
这可能部分反映了HTML5验证器的性质 检验某些“规范”的实验软件 未公开发现,可能随时发生变化 没有通知,经常这样做。 - Source。
注意 - 上面的摘录没有改变,但不是完整的问题/答案,只是片段。建议任何未来的读者看到链接到此答案顶部的线程,以获取完整问题+解释为什么会出现这种情况。
答案 1 :(得分:1)
首先,HTML 5规范不断改变验证器,这个答案的有效性可能会被打破。
话虽如此,我重复the quote定义了一个“含糊不清的&符号”:
不明确的&符号是U + 0026 AMPERSAND字符(&amp;),后跟一个或多个字母数字ASCII字符,后跟U + 003B SEMICOLON字符(;),其中这些字符与任何名称都不匹配在命名的字符引用部分中给出。
换句话说,它看起来像一个命名的字符引用,但规范未知。既然规范定义了它定义何时不能出现这种模糊的&符号的术语:
textarea
,title
:可转义的原始文本元素可以包含文本和字符引用,但文本不得包含不明确的&符号。也从规范中引用了要点。请在规范中搜索“模糊的&符号”,以获取此处省略的完整句子。
HTML 5规范确实允许在原始文本元素(script
和style
标记)中使用含糊不清的符号。仅仅因为HTML 5它给出了“模糊的&符号”的定义,并且浏览器能够应对“模糊的&符号”,并不意味着它们对一般用途有效。
所以逃避“歧义&符号”使其明确,script
和style
标记除外。
让我们回到你的案子。你没有“模糊的&符号”,因为你的&符号后面没有字母数字和分号。因为它没有遵循那个序列,所以应该假定你的&符号是字面意思并保持原样。因此,根据HTML 5规范,您的&符应被视为有效。
备注:我建议你逃避你的&符号,因为你依赖于不稳定规范的细节。此外,我不希望每个软件都遵循关闭的规范,而是采用更简单的规则来逃避&符号,因为我无法看到这会引发麻烦。