當在php中使用mb_detect_encoding函數進行編碼識別時,很多人都碰到過識別編碼有誤的問題,例如對與GB2312和UTF- 8,或者UTF-8和GBK(這裡主要是對於cp936的判斷),網上說是由於字符短是,mb_detect_encoding會出現誤判。
例如:
$encode = mb_detect_encoding($keytitle, array("ASCII",'UTF-8′,"GB2312′,"GBK",'BIG5′)); if ($encode == “UTF-8″){ $keytitle = iconv("UTF-8″,"GBK",$keytitle); }
這段代碼的作用是檢測字符串的編碼是否UTF-8,是的話就轉換為GBK。
可是當 $keytitle = “%D0%BE%C6%AC”;時。檢測結果卻是UTF-8.這個bug其實不算是bug,寫程序時也不應當過於依賴mb_detect_encoding,當字符串較短時,檢測結果產生偏差的可能性很大。
怎麼解決呢,我的辦法是:
$encode = mb_detect_encoding($keytitle, array('ASCII','GB2312′,'GBK','UTF-8');