【问题标题】:Are IRIs valid as HTML attribute values?IRI 作为 HTML 属性值是否有效?
【发布时间】:2012-12-28 19:35:00
【问题描述】:

使用包含非 ASCII 字符的 IRI 作为属性值(例如 href 属性)而不是 URI 是否有效? HTML 风格(HTML 和 XHTML,4 和 5)之间有什么区别吗?至少RFC 3986 似乎暗示它不是。

我意识到使用百分比编码可能会更安全(对于较旧且不支持 IRI 的软件),但我正在寻找有关标准的明确答案。

到目前为止,我已经对 W3C validator 进行了一些测试,并且 URI 中未转义的 unicode 字符不会触发 HTML 4/5 和 XHTML 4/5 文档类型的任何警告或错误(但当然没有错误消息并不意味着没有错误)。

至少 chrome 还支持原始 UTF-8 IRI,但在触发 HTTP 请求之前会对其进行百分比转义。此外,我的网络服务器 (lighttpd) 似乎支持 UTF-8 字符的百分比编码以及 HTTP 请求中的未编码形式。

【问题讨论】:

标签: html utf-8 uri urlencode


【解决方案1】:

HTML 4.01 很简单。不同的属性对于它们可以包含的内容有不同的规则,但是如果我们正在处理 <a> 元素上的 href 属性,那么 HTML 4 spec, section B.2.1 Non-ASCII characters in URI attribute values 会说:

...下面的href值是非法的:

<A href="http://foo.org/Håkon">...</A>

HTML5 是不同的。它说IRIs are valid providing they comply with some additional conditions.

如果至少满足以下条件之一,则 URL 是有效的 URL 持有:

  • URL 是有效的 URI 参考 [RFC3986]。

  • 该 URL 是有效的 IRI 引用,它没有查询组件。 [RFC3987]

  • URL 是有效的 IRI 引用,其查询组件不包含未转义的非 ASCII 字符。 [RFC3987]

  • URL 是有效的 IRI 引用,并且 URL 文档的字符编码是 UTF-8 或 UTF-16 编码。 [RFC3987]

XHTML 1.x 遵循与 HTML 4.01 相同的规则。

XHTML5 与 HTML5 相同。

【讨论】:

    【解决方案2】:

    如有疑问,请阅读官方 HTML 规范以获得明确的答案。

    HTML 4 根本不支持 IRI。它们必须按照 RFC 3987 Section 3.1 编码为 URI,或者将非 ASCII URI 数据编码为 UTF-8,按照 HTML4 Section B.2.1 进行百分比编码

    根据HTML5 Section 2.6,HTML 5 在所有允许 URL 的地方都支持 URI 和 IRI。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 1970-01-01
      相关资源
      最近更新 更多