2010年1月10日 星期日

php中由big5轉utf8,iconv不是個負責任的函數

可能是因為你還沒有痛過!iconv這個函數,是很不負責任的,因為他遇到轉不出來的字,就停住了!
我在網路上找到這個函數,稍微改了一下,如果轉不出來的函數,就會變空白,然後繼續轉換字串中所有的字元。
請享用。


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;
}


摘自:http://dev.sopili.net/2009/08/phpbig5utf8iconv.html

3 則留言:

lin.alston 提到...

iconv 會讓你知道那個位置的字沒辦法轉才是正確的啊,不告訴 user 哪裡有問題不太好

Ryoko 提到...

他不責任是因為他遇到轉不出來的字,就停住了!
你的網頁的執行會因為iconv轉不出來而停住,這就是不太好的問題

lin.alston 提到...

你如果要忽略轉不出來的碼,iconv 有 -c 可以用。但我不覺得網頁因為 iconv 轉不出來就停住所以就用 -c 是好理由, 除非轉不出來的字可以不理會。

wibiya widget