|
不用iconv库的gb2312与utf-8的互换函数
关附件: 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); ?>
返回类别: 教程 上一教程: PHP4与MySQL数据库操作函数详解(三) 下一教程: PHP编程的文件资源治理一例
您可以阅读与"不用iconv库的gb2312与utf-8的互换函数"相关的教程: · 在PHP中进行GB2312与UTF-8的互换 · UTF-8转变成GB2312的全处理 · 在PHP3中实现SESSION的功能(附、COOKIE函数库的使用:test_cookie.php3) · UTF-8 , GBK , GB2312 编码规则与检测 · 不用数据库的多用户文件自由上传投票系统(3)
|