除了 iconv, mb_string 也是一個用來轉換偵測字元編碼的好東西。先前再做信件編碼處理的部份, 都是用到 iconv, 不過這次用 mb_string 處理一些簡體、繁體及UTF-8之間的轉換, 所以來寫一下 memo。(基本上只對簡體繁體及UTF-8做處理)
function detectCharset($str){
$encoding_list = 'ASCII, EUC-CN, BIG-5, UTF-8';
return mb_detect_encoding($str, $encoding_list);
}
嗯~ 看到 $encoding_list , EUC-CN 是..?? 嗯, 在 mb_string 中 EUC-CN 代表的就是 GB2312, 而平常在打的 big5 在 mb_string 則是要成 BIG-5, 就是要多一個 dash ( - ), 跟一般用的編碼名稱稍微有些不一樣, 這裡列出部分 mb_string 的 encoding 名稱:
UTF-8
EUC-JP
ISO-2022-JP
EUC-CN
CP936
BIG-5
在繁簡中文以及UTF-8的偵測的時候, 要注意 $encoding_list 的順序, 如果將 $encoding_list 變成下列的順序位置, 那麼結果可能不會是你想要的。
$encoding_list = 'BIG-5, UTF-8, EUC-CN';
如果用這個 encoding_list 來偵測 GB2312 的字元的時候, 所得到的結果將會是 BIG-5。我想這個結果可能是因為, BIG-5 也包含了一些簡體字元, 不過我測試過的數量不多, 也許會有例外, 但目前這個 encoding_list 的順序還不錯, 可以正確抓到我要的結果。
function convertCharset($str, $encoding){
if ($encoding == 'EUC-CN') $encoding = 'CP936';
if ($encoding == 'UTF-8' || $encoding == 'ASCII')
return $str;
else
return mb_convert_encoding($str, 'UTF-8', $encoding);
}
沒有留言:
張貼留言