不用iconv庫的gb2312與utf-8的互換函數_PHP教程

WBOY
發布: 2016-07-21 16:11:32
原創
1018 人瀏覽過


一份gb2312.txt(184799位元組)確實顯得太大了點,而且還要經unicode轉換。
這份對照表為51965字節,要小的多了。
對於無法使用iconv函式庫的場合還是很實用的。

//對照表的使用
$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);
?>

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/313958.htmlTechArticle一份gb2312.txt(184799位元組)確實顯得太大了點,還要經unicode轉換。 這份對照表為51965字節,要小的多了。 對於無法使用iconv函數庫的場...
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板