Gecko、validator.nu/W3C 驗證器對字符引用的錯誤回報與規範不符

根據 HTML 規範有關 Tokenization 的部份[1],命名型字符引用(暫譯,named
character reference)會出現解析錯誤的情型只有兩種:
1)「&」和「;」的中間是英文或數字,且引用的英文詞不存在。例如:「&anp;」
2) 沒有「;」的字符引用。例如:「&lt」

對於第一種,規範是說只要「&」和「;」中間有不是英文或數字的字符(或沒有
「;」),就不算解析錯誤。例如:
3)「a & b」→ validator.nu 結果[2]
4)「& lt;」→ validator.nu 結果[3]
5)「<a href="query?a=1&b=2"></a>」→ validator.nu 結果[4]
6)「&rarr」(「&rarr;」不能省「;」)→ validator.nu 結果[5]
7)「小明&小華」→ validator.nu 結果[6]

注意到 validator.nu 把 5)、6)、7) 當作解析錯誤了,不合規範。大家覺得規範
規定的行為跟 validator.nu 的行為哪個比較好呢?

由於 HTML 現在定義了完整的解析過程,符合規範定義的 HTML 解析器(瀏覽
器),最後不管給它什麼都會得到一樣的結果,解析錯誤的定義/驗證器 的目的變
成比較不是為了兼容,而是變成相對比較功能導向一點 — 防止網頁作者出錯。比
如說:

1)「&anp;」之所以會有解析錯誤,是因為作者可能打錯了。
2)「&lt」之所以會有解析錯誤,是因為作者可能少打了分號,另外這個行為據
Peter 說跟舊版 Nescape 不兼容。(如果知道這個行為還刻意用它的我只能說這
個人是個瘋子)
3)「a & b」之所以沒有解析錯誤是因為,這個地方作者弄錯的可能性不太大,加
上這種情況在英文蠻常出現的,沒多少人會特別想用「a &amp; b」。
4)「& lt;」之所以沒有解析錯誤,我想是因為會多打空白的人很少,但是這個地
方值得懷疑。
5)「<a href="query?a=1&b=2"></a>」之所以沒有解析錯誤,是因為這邊事實上作
者根本沒有弄錯,只是不想要用 「&amp;」而已,而且這個解析應該兼容超過十年
了,驗證器*不該*報這個錯誤。
6)「&rarr」我覺得就很難說了,規範是說沒錯,但是我感覺在這種情況漏打「;」
的機率很高,應該報錯已幫助使用者。
7) 這種例子應該不常見,基本上我覺得規範說不要報錯也合理。總之驗證器跟這
個不符。

總之,在 5)、6)、7) 這三個例子裡,5) 非常常見這點應該沒什麼疑問,這裡不
應該報錯,這裡報錯只是讓大家更不想要使用驗證器而已(雖然大概本來就不是很
多人用...)。有誰有興趣的可以把這個 拿來當主例子去報一下錯,去 Mozilla
的 Bugzilla 就行了,因為這三個專案其實是用同一份程式碼。有興趣但是不知道
方法的可以私下聯絡我。

另外一個相關的問題,目前規範和驗證器碰到「a < b」都會報錯,但是假如要跟
4) 一致一點的話好像不應該報錯。大家覺得呢?有人手打 HTML 標籤的時候不小
心按到空白過嗎?(例:< b>Test</b>)

[1]
http://www.w3.org/html/ig/zh/wiki/HTML5/tokenization#.E5.AD.97.E7.AC.A6.E5.BC.95.E7.94.A8.E7.9A.84_Tokenization
下面
[2]
http://validator.nu/?doc=data%3Atext%2Fhtml%3Bcharset%3Dutf-8%2C%3C%21DOCTYPE+html%3E%3Ctitle%3E%3C%2Ftitle%3Ea+%26+b&charset=&schema=&preset=&parser=&nsfilter=

[3]
http://validator.nu/?doc=data%3Atext%2Fhtml%3Bcharset%3Dutf-8%2C%3C%21DOCTYPE+html%3E%3Ctitle%3E%3C%2Ftitle%3E%26+lt%3B&charset=&schema=&preset=&parser=&nsfilter=
[4]
http://validator.nu/?doc=data%3Atext%2Fhtml%3Bcharset%3Dutf-8%2C%3C%21DOCTYPE+html%3E%3Ctitle%3E%3C%2Ftitle%3E%3Ca+href%3D%22query%253Fa%3D1%26b%3D2%22%3E%3C%2Fa%3E&charset=&schema=&preset=&parser=&nsfilter=
[5]
http://validator.nu/?doc=data%3Atext%2Fhtml%3Bcharset%3Dutf-8%2C%3C%21DOCTYPE+html%3E%3Ctitle%3E%3C%2Ftitle%3E%26rarr&charset=&schema=&preset=&parser=&nsfilter=
[6]
http://validator.nu/?doc=data%3Atext%2Fhtml%3Bcharset%3Dutf-8%2C%3C%21DOCTYPE+html%3E%3Ctitle%3E%3C%2Ftitle%3E%E5%B0%8F%E6%98%8E%26%E5%B0%8F%E8%8F%AF&charset=&schema=&preset=&parser=&nsfilter=

此致

Kenny

Received on Tuesday, 8 November 2011 02:48:36 UTC