【问题标题】:HTML5 ambiguous ampersands in URLsURL 中的 HTML5 模棱两可的 & 符号
【发布时间】:2013-06-28 21:38:39
【问题描述】:

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

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

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

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

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

这有什么确定的吗?

【问题讨论】:

标签: html url w3c-validation


【解决方案1】:

我相信你是对的 - 根据下面的帖子,这是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.

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

【讨论】:

  • 很高兴找到一个明确的声明,因为即使是不稳定的开发版本现在也无法提供这样的示例:-/
  • @DjangoReinhardt 你是对的,它没有。在此处查看错误报告 - bugzilla.validator.nu/show_bug.cgi?id=841
  • 嗯。目前看来,它实际上是一个灰色地带?我将不接受您的回答,看看是否有其他人会提供更多信息。
  • @DjangoReinhardt 这是可以理解的。我会自己发布错误报告,但我认为它会被标记为欺骗
【解决方案2】:

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

话虽如此,我重复the quote,它定义了一个“模棱两可的&符号”:

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

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

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

规范中也引用了要点。此处省略的完整句子请在规范中搜索“ambiguous & &”。

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

所以转义“模棱两可的&符号”使它们明确除了scriptstyle标签。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 2017-11-13
    相关资源
    最近更新 更多