-
青年狼
應該是遇到“許蓋功”的樣子。
許蓋功,即不是人,也不是獸,而是Big5編碼的一個缺陷。
Big5編碼使用兩個位元來表示一個漢字。第一個位元一定是>127,這樣就可以分別英數字以及漢字。
不過,第二個位元有可能踩到<127的值。
使用低字元的問題就是會遇到特殊符號。例如“\”、“]”、“"”、“{”之類的符號在許多語言中都有特殊功用(例如Windows中,"\"是作爲數據夾分割符,而在Unix中則作爲轉義字元)。
許蓋功這三個字,在Big5編碼中,第二位元恰巧都是“\”。
所以許多軟体都會在處理這些字的時候出現問題。
PHP的字串與C的字串一樣只是位元陣列而已,所以很容易出現“許蓋功問題”。
(EUC編碼的)GB2312和UTF-8的第二(和UTF-8的第三)個位元都在160以上,所以不會和Big5一樣容易受影響。
那麽,看看茶大遇到的問題。
財 的編碼是 0xb0, 0x5d,
5d 對應字符 “]”,所以 “[hide=財]”就會被解釋成“[hide=°]]”
(當然°是該位元在Unicode中的字元,在Big5中這個地方是沒有字元的,因此轉換時會發生錯誤。)
閱 的編碼是 0xbe, 0x5c,
5c 對應字符 “\”,所以“[hide=閱]”就會被解釋成“[hide=
發文規則
- 您不可以發表新主題
- 您不可以發表回覆
- 您不可以上傳附件
- 您不可以編輯自己的文章
-
討論區規則