不用iconv庫的gb2312與utf-8的互換函數 - 中國WEB開發者網絡 (http://www.webasp.net) -- 技術教程 (http://www.webasp.net/article/) --- 不用iconv庫的gb2312與utf-8的互換函數 (http://www.webasp.net/article/15/14756.htm) |
| -- 作者:未知 -- 發佈日期: 2004-11-10 |
| 一份gb2312.txt(184799字節)確實顯得太大了點,而且還要經unicode轉換。
這份對照表為51965字節,要小的多了。 對於無法使用iconv函數庫的場合還是很實用的。 <?php //對照表的使用 $filename = "gb2utf8.txt"; $fp = fopen($filename,"r"); while(! feof($fp)) { list($gb,$utf8) = fgetcsv($fp,10); $charset[$gb] = $utf8; } fclose($fp); //以上讀取對照表到數組備用 /** gb2312到utf-8 **/ function gb2utf8($text, &$charset) { //提取文本中的成分,漢字為一個元素,連續的非漢字為一個元素 preg_match_all("/(?:[\x80-\xff].)|[\x01-\x7f]+/",$text,$tmp); $tmp = $tmp[0]; //分離出漢字 $ar = array_intersect($tmp, array_keys($charset)); //替換漢字編碼 foreach($ar as $k=>$v) $tmp[$k] = $charset[$v]; //返回換碼後的串 return join('',$tmp); } /** utf-8到gb2312 **/ function utf82gb($text, &$charset) { $p = "/[xf0-xf7][x80-xbf]{3}|[xe0-xef][x80-xbf]{2}|[xc2-xdf][x80-xbf]|[x01-x7f]+/"; preg_match_all($p,$text,$r); $utf8 = array_flip($charset); foreach($r[0] as $k=>$v) if(isset($utf8[$v])) $r[0][$k] = $utf8[$v]; return join('',$r[0]); } //測試 $s = gb2utf8('這是對照表的測試', $charset); echo utf82gb($s, $charset); ?> |
| webasp.net |