2

W3C 验证器在我的某些 URL 中引发了一个关于 & 符号的错误。例如:

<link href="min/?f=static/css/reset.css,static/css/main5.css&2" rel="stylesheet">

然而,根据HTML5 规范,验证器是错误的:

不明确的 & 符号是一个 U+0026 AMPERSAND 字符 (&),后跟一个或多个字母数字 ASCII 字符,后跟一个 U+003B 分号字符 (;),其中这些字符与命名中给出的任何名称都不匹配字符参考部分。

该站点得出了相同的结论,并指出目前没有验证器正确实施规范。

这有什么确定的吗?

4

2 回答 2

4

我相信您是正确的 - 根据以下线程,这是HTML5 验证器中的错误。我不知道这是否是“确定性的”,因为它不是官方声明(但我认为回复中的名字至少是 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 验证器作为实验性软件的性质,它会检查一些未公开标识的“规范”,并且可能随时更改,恕不另行通知,而且经常这样做。-来源

注意- 上面的摘录没有改变,但不是完整的问题/答案,只是片段。建议任何未来的读者查看此答案顶部链接到的线程,以获取完整问题+解释为什么会发生这种行为。

于 2013-06-28T22:05:07.090 回答
1

首先,HTML 5 规范在不断变化,因此验证器和这个答案的有效性可能会被打破。

话虽如此,我重复定义“模棱两可的&符号”的引用

不明确的 & 符号是一个 U+0026 AMPERSAND 字符 (&),后跟一个或多个字母数字 ASCII 字符,后跟一个 U+003B 分号字符 (;),其中这些字符与命名中给出的任何名称都不匹配字符参考部分。

换句话说,它看起来像一个命名的字符引用,但在规范中是未知的。现在规范定义了它定义的术语,当这种模棱两可的&符号不得出现时:

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

规范中也引用了要点。请在规范中搜索“歧义与符号”以获取此处省略的完整句子。

不过,HTML 5 规范确实允许在原始文本元素(scriptstyle标签)中使用模棱两可的 & 符号。仅仅因为 HTML 5 它给出了“不明确的 & 符号”的定义,并且浏览器在大多数情况下能够处理“不明确的 & 符号”,并不意味着它们对一般用途有效。

因此,请避开“不明确的 & 号”以使它们明确,除了 inscriptstyle标签。

让我们回到你的情况。您没有“不明确的 & 号”,因为您的 & 号后面没有字母数字和分号。由于它没有跟随该序列,因此应该假设您的 & 号是按字面意思理解的并保持原样。因此,根据 HTML 5 规范,您的 & 符号应该被认为是有效的。

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

于 2013-09-05T19:11:19.050 回答