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

王朝other·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

关附件: 2442675.ZIP(33kb)

偶然在www.phpx.com见到一份gb2312与utf-8的对照表在征询代码,于是写了几段代码。小试了一下,感觉还可以。给大家分享一下。

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

?>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航