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

时间:2012-12-28 19:35:01

标签: html utf-8 uri urlencode

使用包含非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字符。

2 个答案:

答案 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