php使用mb_detect_encoding檢測字串編碼

來源:互聯網
上載者:User
關鍵字 php使用mb_detect_encoding檢測字串編碼

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');

三個參數分別是:被檢測的輸入變數、編碼方式的檢測順序(一旦為真,後面自動忽略)、strict模式

對編碼檢測的順序進行調整,將最大可能性放在前面,這樣減少被錯誤轉換的機會。

一般要先排gb2312,當有GBK和UTF-8時,需要將常用的排列到前面。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.