欢迎来到福编程网,本站提供各种互联网专业知识!

不用iconv库的gb2312与utf-8的互换函数

发布时间:2006-10-09 作者: 来源:转载
一份gb2312.txt(184799字节)确实显得太大了点,而且还要经unicode转换。这份对照表为51965字节,要小的多了。对于无法使用iconv函数库的场合还是很实用的。

一份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);

?>

相关推荐