8

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

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

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

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

4

2 回答 2

6

HTML 4.01 很简单。不同的属性对于它们可以包含的内容有不同的规则,但是如果我们正在处理<a>元素上的 href 属性,那么HTML 4 规范,B.2.1 URI 属性值中的非 ASCII 字符部分说:

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

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

HTML5 是不同的。它说IRI 是有效的,只要它们符合一些附加条件。

如果至少满足以下条件之一,则 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 相同。

于 2012-12-29T02:22:24.100 回答
2

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

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

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

于 2012-12-29T02:30:27.000 回答