URL中的HTML5模糊&符号

时间:2013-06-28 21:38:39

标签: html5 url w3c-validation

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得出了相同的结论,并指出目前没有验证器正确实现规范。

这有什么确定性的吗?

2 个答案:

答案 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;不必转义为&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字符(;),其中这些字符与任何名称都不匹配在命名的字符引用部分中给出。

换句话说,它看起来像一个命名的字符引用,但规范未知。既然规范定义了它定义何时不能出现这种模糊的&符号的术语:

  • textareatitle:可转义的原始文本元素可以包含文本和字符引用,但文本不得包含不明确的&符号。
  • MathML,SVG元素:......但文字不得包含字符U + 003C LESS-THAN SIGN(&lt;)或含糊不清的&符号。
  • 普通非空HTML元素:...但文字不得包含字符U + 003C LESS-THAN SIGN(&lt;)或含糊不清的&符号。
  • 属性值:...带有附加限制,即文本不能包含不明确的&符号。

也从规范中引用了要点。请在规范中搜索“模糊的&符号”,以获取此处省略的完整句子。

HTML 5规范确实允许在原始文本元素(scriptstyle标记)中使用含糊不清的符号。仅仅因为HTML 5它给出了“模糊的&符号”的定义,并且浏览器能够应对“模糊的&符号”,并不意味着它们对一般用途有效。

所以逃避“歧义&符号”使其明确scriptstyle标记除外。

让我们回到你的案子。你没有“模糊的&符号”,因为你的&符号后面没有字母数字和分号。因为它没有遵循那个序列,所以应该假定你的&符号是字面意思并保持原样。因此,根据HTML 5规范,您的&符应被视为有效。

备注:我建议你逃避你的&符号,因为你依赖于不稳定规范的细节。此外,我不希望每个软件都遵循关闭的规范,而是采用更简单的规则来逃避&符号,因为我无法看到这会引发麻烦。