IRI作为HTML属性值是否有效?

9

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

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

到目前为止,我已经使用{{link2:W3C验证器}}进行了一些测试,并且在HTML 4/5和XHTML 4/5 doctype中,未转义的Unicode字符在URI中不会触发任何警告或错误(但是当然没有错误消息并不意味着没有错误)。

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


请注意,RFC 3987的1.2节提到,由RFC 2616定义的HTTP 不支持 IRI,因此处理它们是超出标准范围的。在尝试检索所引用的资源之前,您(或您的浏览器或其他人)需要先将给定的IRI映射到URI。 - Oliver
可能是URL中的Unicode字符的重复问题。 - Ciro Santilli OurBigBook.com
2个回答

7

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相同。


3

当有疑问时,请阅读官方HTML规范以获取确定的答案。

HTML 4完全不支持IRI。必须按RFC 3987第3.1节编码为URI,或按HTML4第B.2.1节使用UTF-8百分号编码非ASCII URI数据。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接