使用包含非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请求之前,它们会逃脱它们。此外,我的Web服务器(lighttpd)似乎在HTTP请求中以百分比编码和未编码形式支持UTF-8字符。
答案 0 :(得分:6)
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的Document的字符编码是UTF-8或UTF-16编码。 [RFC3987]
XHTML 1.x遵循与HTML 4.01相同的规则。
XHTML5与HTML5相同。
答案 1 :(得分:2)
如有疑问,请阅读官方HTML规范以获得明确答案。
HTML 4根本不支持IRI。它们必须按RFC 3987 Section 3.1编码为URI,或者将非ASCII URI数据编码为UTF-8,每个HTML4 Section B.2.1编码百分比
HTML 5支持允许网址的所有地方的URI和IRI,每HTML5 Section 2.6。