#  > 【巍峨峻山】 公告服務區 >  > 意見箱 >  > [反映] Hide語法有bug(汗)

## 好喝的茶

hide語法中，有
{hide=點擊文字}一段文字{/hide}
這一種寫法。

然而，當點擊文字包含某幾個文字時，會出現bug。
目前發現的有「財」、「閱」。

點擊文字為「財」︰


財


文字



點擊文字為「閱」︰


閱


文字



錯誤原因不明(死)。
請狼王大查看一下原因，謝嚕。

----------


## 狼王白牙

您好：謝謝粉好喝的茶

這個原因目前不明，可能是字碼衝突的問題，果然是大量使用這種語法才會發現 
請繼續回報是否有其他字體會產生這種現象

我目前暫時沒有能力去修復，不過會繼續觀察試著修正

----------


## 卡庫爾

應該是遇到“*許蓋功*”的樣子。

許蓋功，即不是人，也不是獸，而是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=

----------


## 呆虎鯨

於是戰的更加hide=奇怪]@　咚一聲 
　　停戰最好的方式便是 
　　黑暗。關掉一切光明 
　　最後卻染的一片紅 

奇怪


　　呆鯨好奇怪    
    


＋＋－－－＋＋
　　以上是呆鯨發文的時候遇到的ｂｕｇ（汗）
　　如果把ＨＩＤＥ的＂=奇怪"拿掉
　　文章就會正常顯示

　　以上＠＠

----------


## 卡庫爾

> 於是戰的更加hide=奇怪]@　咚一聲 
> 　　停戰最好的方式便是 
> 　　黑暗。關掉一切光明 
> 　　最後卻染的一片紅 
> 
> 奇怪
> 
> 
> 　　呆鯨好奇怪    
> ...


這個Bug很奇怪(咦)
因爲“*奇怪*”兩個字都沒特殊的代碼……拿掉與不拿掉“奇怪”，顯示也都一樣。

*加*的第二個位元倒是“[”(所以可能會令phpBB判讀錯誤)……

所以究竟哪裏奇怪？卡庫爾不清楚。

題外話……卡庫拉迪今天也被許蓋功抓住了嗚……



> [hide]值得一提的*功*能更新

----------


## Baroque Boyce

這個Hide語法的裡面...
有些文字最好不要放在點擊文字中

只能說
問題是出在字的編碼吧？

不過說真的
卡庫爾好強啊！！
居然能查出這兩個中文字的編碼...囧

看來一山還有一山高啊...
關於這麼詳細的東西，小洛從來沒有碰過
今天看到這篇，也好好學起來
(但最下面的那串代碼就免啦！...因為半個字都看不懂)

----------


## 卡庫爾

最下面的那串代碼是給人看不是給獸看的(笑)

是的，問題出在Big5的編碼有問題。

----------

