2012-12-28 88 views
8

使用包含非ASCII字符的IRI作爲屬性值(例如href屬性)而不是URI是否有效? HTML風格(HTML和XHTML,4和5)有什麼區別?至少RFC 3986似乎暗示它不是。IRI是否作爲HTML屬性值有效?

我意識到使用百分比編碼可能會更安全(關於較舊的和不知道IRI的軟件),但我正在尋求關於標準的明確答案。

到目前爲止,我已經使用W3C validator做了一些測試,並且URI中未轉義的unicode字符不會觸發HTML 4/5和XHTML 4/5 doctypes的任何警告或錯誤(但當然沒有錯誤消息並不意味着沒有錯誤)。

至少chrome還支持原始UTF-8 IRI,但百分比 - 在觸發HTTP請求之前轉義它們。另外,我的網絡服務器(lighttpd)似乎在HTTP請求中支持UTF-8字符的百分比編碼以及未編碼形式。

+0

請注意[RFC 3987的第1.2節](http://tools.ietf.org/html/rfc3987#section-1.2)提到HTTP [RFC 2616](http://tools.ietf。 org/html/rfc2616)不**支持IRI,因此處理它們超出了標準。您(或您的瀏覽器或某人)需要先將給定的IRI映射到URI,然後再嘗試檢索引用的資源。 – Oliver

+0

[URL中的Unicode字符]的可能重複(http://stackoverflow.com/questions/2742852/unicode-characters-in-urls) –

回答

6

HTML 4.01足夠簡單。不同的屬性有不同的規則,以它們可以包含什麼,但如果我們用href屬性的<a>元素打交道,那麼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。它們必須被編碼爲每的URI RFC 3987 Section 3.1,或編碼非ASCII URI數據爲UTF-8,每HTML4 Section B.2.1

HTML 5百分號編碼支持在網址被允許的所有地方都URI和IRI,每HTML5 Section 2.6

相關問題