分享

[PHP] iconv big5轉換utf8問題

 Alkaid2015 2013-11-03
[PHP] iconv big5轉換utf8問題
雖然全世界都知道會有許功蓋問題,可是還是有不少網站在資料庫裡都還是採用big5碼
之前改到某知名公司所做的的ERP系統,用的是MS-SQL
因為查詢有點慢,所以想要做一個local cache來做一點暫存

用PHP的iconv算是很一般的做法,可是裡面有點問題
以下是測試的CODE:
header("Content-type: text/html; charset=utf-8");
$string = "轉碼測試功蓋銹abc轉碼測試";
$result = iconv("big5","UTF-8",$string);
echo $result;
印出的結果:
轉碼測試功蓋
明顯可以看到這不是許功蓋的錯
稍微查一下,照這個網站說的
"libiconv 不認得七個 BIG5 擴充字:碁, 銹, 裏(請改用'裡'), 墻, 恒, 粧, 嫺,無法將之轉換成對應的 UTF-8;但 Windows API 認得且可以轉換成 UTF-8。"

使用了
php中由"big5轉utf8,iconv不是個負責任的函數"的解法後,轉出的情形如下


轉碼測試功蓋 abc轉碼測試

雖然掉字問題獲得解決,可是也只是跳過而已,並沒有轉出
這時發現另外一個函式:mb_convert_encoding
好像就能解決這個問題,程式碼如下:

$string = "轉碼測試功蓋銹abc轉碼測試";
$result = mb_convert_encoding($string,"utf-8","big5");
echo $result;


mb_convert_encoding的速度好像會比iconv慢不少,不過對於這次的工作來說似乎沒有影響
 
 

原本是使用函式 iconv("utf-8","big5",$str)

將字串$strutf-8編碼轉成big5編碼

但是遇到 這個字轉碼有問題

頁面出現錯誤訊息 

 

上網查了原因

發現是 因為utf-8對應的字比big5還要多

所以使用iconv() 將big5轉utf-8編碼沒有問題

但是將utf-8轉成big5編碼就有可能會發生問題了 

 

找到了另一個也是常用的轉碼函式 mb_convert_encoding($str,"big5","utf-8")

將字串$strutf-8編碼轉成big5編碼

 

網路上是說mb_convert_encoding() 會將無法轉碼的字改成 ? 顯示

不會讓頁面出現錯誤訊息, 無法轉碼

可是當我改用mb_convert_encoding()

原本不能轉碼的 裏 也沒有轉成 ?

而是轉碼成功正常顯示出來了

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多