2009年7月27日 星期一

iconv 轉碼問題

筍子工作雜記

剛剛在處理 MsSQL(big5) 轉 MySQL(UTF8)時,採用了 iconv 去做轉碼的處理
一開始處理幾個 Table 都沒什麼問題,直到一個欄位裡面有中文全形」/」,引起 iconv 無法轉換而整個 SQL 句子中斷
iconv 語法

iconv(FromEncoding, ToEncoding, String);

上網查到 iconv 第二個參數可以加上額外參數

//IGNORE直接把錯誤的字去掉,使用上正常,但是資料與原始的不同
$txt = iconv("big5","utf-8//IGNORE",$query);
//TRANSLIT遇到中文的"/"還是出錯
$txt = iconv("big5","utf-8//TRANSLIT",$query);

這邊有一篇關於 Translit 參數的說明
Iconv and incompatible encodings
文章中指出

//TRANSLIT will raise an exception on characters it can't transliterate, however; this can be solved by using '//IGNORE//TRANSLIT' together (in that order).

最後是採用了 mb_convert_encoding 來解決

//mb_convert_encoding 可以正常的把字串轉為 UTF8,但聽說速度較慢
$txt = mb_convert_encoding($query,"utf-8","big5");

【下列文章您可能也有興趣】

沒有留言: