? 發問時間: 電腦與網際網路程式設計 · 1 0 年前

mb_convert_encoding轉BIG5出現問號

我的資料庫內容是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();過程中

能夠事先動一些手腳??

請高手明示~~~

已更新項目:

可否詳說一些您解答的 poc

感激~~~

1 個解答

評分
  • Chiu
    Lv 4
    1 0 年前
    最佳解答

    試試看 iconv. 下面是小小的 poc, 你參考看看.

    <?

    mb_internal_encoding("UTF-8");

    $str="虫堃";

    function bad_chars($c) { // input u8

    $map = array( "堃" => "<img src='ff.png'></img>",

    "蚘" => "<img src='gg.png'></img>" );

    if (isset($map[$c])) return $map[$c];

    return "<img src='unknown.png'></img>";

    }

    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, 就是把無法轉話的碼對應成另外的東西,例如圖片.

    參考資料: 使用經驗, 使用經驗
還有問題?馬上發問,尋求解答。