2011-12-23 15 views
4

HTML 4.01 spec says for hexadecimal character references規格理由€到Ÿ想

數字字符引用指定文檔字符集中的 的代碼位置。

所以如果文檔字符集編碼是UTF-8,那麼數字引用應該指定一個Unicode代碼點。

HTML5 spec says for hexadecimal character references

的符號必須遵循由U + 0023數字符號字符(#), 必須後跟一個U + 0078拉丁小寫字母X 字符(x)或一個U + 0058 LATIN CAPITAL LETTER X字符(X),其 然後必須隨後在範圍內的一個或多個數字U + 0030 DIGIT 零(0)到U + 0039數字9(9),U + 0061 LATIN小寫字母A到 U + 0066拉丁小寫字母F和U + 0041 LATIN CAPITAL LETTER A到 U + 0046 LATIN CAPITAL LETTER女,代表一個鹼16整數 ,它對應於根據以下定義 允許的Unicode代碼點。這些數字後面必須跟着一個U + 003B SEMICOLON字符(;)。

沒有提到該文件的字符集,而且它只是說,該數值標識Unicode代碼點。

但似乎所有的現代瀏覽器(我沒有測試過老的)治療€通過Ÿ因爲如果他們引用的Windows 1252

例如,€顯示,但U + 0080不是的代碼點,U + 20AC是。並且U + 0080的Unicode代碼點被定義爲PAD

€也(正確)顯示

是通過瀏覽器這只是務實的行爲,或有在我缺少一個規範的理由?

[注意小數字符引用具有相同的行爲。我只是用於明確和一致的十六進制那些]

回答

3

正如我已經做here還有,我會再次引用Wikipedia

數字引用總是引用Unicode碼點,而不管該頁面的編碼。禁止引用永久未定義的字符和控制字符的數字引用,但換行符,製表符和回車符除外。也就是說,十六進制範圍00-08,0B-0C,0E-1F,7F和80-9F中的字符不能在HTML文檔中使用,即使通過引用也是如此,因此例如™是不允許的。但是,爲了與早期HTML作者和瀏覽器的後向兼容性忽略了這一限制,80-9F範圍內的原始字符和數字字符引用被某些瀏覽器解釋爲表示在Windows-1252編碼中映射到80-9F字節的字符。

所以這似乎是一個遺留問題。

+0

啊,是的,謝謝你。維基百科幾乎沒有一個規範,所以不完全回答這個問題,但無論如何非常有幫助。 +1 – Alohci 2011-12-23 15:09:16

相關問題