2009年5月10日 星期日

php iconv Big5 to UTF-8

php iconv Big5 to UTF-8 [討論區 - PHP新手區] : 台灣PHP聯盟[ Taiwan PHP User Group ]


我在使用iconv要把Big5轉到utf8發生了問題,iconv遇到無法轉的字後,就不轉了,所以該字以後都掉字了,把是要把oracle(big5)資料轉到mysql(utf8)。
php 由oracle(big5)讀出【黃埀儀】後,用iconv轉成utf8,回傳的字只剩下【黃?(?為不可視字元】,轉到mysql後只剩下【黃】,我也 試過mb_convert_encoding,但是轉完後顯示【黃?番】,因為中間那個字很特殊沒有辦法轉過去,遇到無法轉,要怎麼樣讓後面繼續轉下去, 例如【黃埀儀】轉成【黃?儀】,謝謝。


逐字轉解決

function big52utf8($big5str) {

$blen = strlen($big5str);
$utf8str = "";

for($i=0; $i<$blen; $i++) {

$sbit = ord(substr($big5str, $i, 1));
//echo $sbit;
//echo "
";
if ($sbit < 129) {
$utf8str.=substr($big5str,$i,1);
}elseif ($sbit > 128 && $sbit < 255) {
$new_word = iconv("BIG5", "UTF-8", substr($big5str,$i,2));
$utf8str.=($new_word=="")?"?":$new_word;
$i++;
}
}

return $utf8str;

}// end func