2008年12月22日星期一

GOOGLE CHRISTMAS LOGO



兩條友係度整緊乜?








.
.
.
.
.
.
.
.
.



Merry Christmas!

PHP 繁簡字碼直接轉換

最近幾日都係度整緊字碼既事 ,UTF-8, BIG5, GB2312, GBK。 要做既係兩樣野:
  1. detect charset
  2. 簡繁轉換

總結如下:

iconv斷字
icon
到無法轉換的字時, 預設是會斷句。
可以在第2個参數加入//IGNORE
iconv("BIG5","UTF-8//IGNORE",$query);
或//TRANSLIT
iconv("BIG5","UTF-8//TRANSLIT",$query);

//TRANSLIT will raise an exception on characters it can't transliterate, however; this can be solved by using '//IGNORE//TRANSLIT' together (in that order).
也可以兩個参數一起來
iconv("BIG5","UTF-8//IGNORE//TRANSLIT",$query);

用mb_convert_encoding 的話, 但會把有問題的字換成 "?"

gb->utf8

iconv("GBK","UTF-8//ignore",$word);
iconv("GB2312","UTF-8//ignore",$word);

用GBK比GB2312好, 據說係因為GBK既字庫比較大

mb_convert_encoding

mb_convert_encoding($word,"UTF-8","BIG-5");

有以下地方要注意:
  • 参數次序跟ICONV剛好倒轉
  • "BIG5" 要換成 "BIG-5"
  • "EUC-CN"要換成"GB2312"
  • "CP936" 要換成 "GBK"

charset detecting
$encoding_list="UTF-8,BIG-5,EUC-CN";
mb_detect_encoding($word, $encoding_list);

$encoding_list為 charset 的次序

-繁簡字碼可能會誤測, 所以次序很重要

繁簡換轉

上GOOGLE搜尋一下,
如果想簡轉繁的話, 方法是 UTF-8 -> GB2312 -> BIG5 -> UTF-8, 的確是可行的, 也不用任何外部的文件。但因為BIG5和 GB2312的字庫不夠UTF-8的大, 所以總有些字會變成 "?"。
解決方法是找個 簡體的UTF-8 -> 繁體UTF-8 的MAP , 再跟據MAP直接轉換。問GOOGLE後發現好像沒有人試過這樣做, 所以就寫了個類轉換。

源碼可以這下載
http://code.google.com/p/fukidutf8t2s/