我的資料庫內容是utf-8
但是utf-8在台灣常受到歧視
很多web mail預設big5
所以如果使用的user不知道有轉碼這種事
會看到一堆亂碼而嚇出冷汗
因此我使用php函數
echo mb_convert_encoding($content,"BIG5","UTF-8");
將UTF-8轉成BIG5
但是卻有一些中文字在convert後
變成了?
例如值,冲等字
從UTF-8轉BIG5後變成問號
我非常痛苦
請問該怎麼辦??
使用圖檔來代替?
我是否能先預設有哪些字會轉碼失敗
事先用圖檔取代?
還是說我在使用mb_convert_encoding();過程中
能夠事先動一些手腳??
請高手明示~~~
2006-12-12 08:48:20 · 1 個解答 · 發問者 ? 2 in 電腦與網際網路 ➔ 程式設計
可否詳說一些您解答的 poc
感激~~~
2006-12-15 04:17:19 · update #1
試試看 iconv. 下面是小小的 poc, 你參考看看.
mb_internal_encoding("UTF-8");
$str="虫堃";
function bad_chars($c) { // input u8
$map = array( "堃" => "",
"蚘" => "" );
if (isset($map[$c])) return $map[$c];
return "";
}
function u8tob5_char($char) {
return iconv("UTF-8","BIG5//IGNORE",$char);
}
function u8tob5($str) {
$len=mb_strlen($str);
// echo $len;
for ($i=0; $i<$len; $i++) {
$u8c = mb_substr($str,$i,1);
$b5c = u8tob5_char($u8c);
if ($b5c == "" ) {
$ret .=bad_chars($u8c);
}
$ret .= $b5c;
}
return $ret;
}
echo u8tob5($str);
?>
2006-12-15 18:02:30 補充:
1. 這裡的 $str 是假設 utf-8 的字串, 如果沒辦法輸入的話, 寫一個 form 設定 utf-8 為 charset 來拿這個字串. 例如: "堃" 在 utf-8 可以顯示, big5 便沒有對應的字碼.
2006-12-15 18:02:38 補充:
2. iconv 如果加上 //IGNORE 的話, 無法轉換的字碼不會出現 warning, 而會直接省略, 利用這個特性, 被省略掉的( return 空白) 就表示你說的會轉碼失敗的. mb_convert_encoding 對 big5 的支援尚不完整, 我自己是很少用他.
2006-12-15 18:02:45 補充:
3. bad_chars() 是一個 mapping function, 就是把無法轉話的碼對應成另外的東西,例如圖片.
2006-12-12 12:12:44 · answer #1 · answered by Chiu 4 · 0⤊ 0⤋