当前位置: 首页 > 图文教程 > 网络编程 > PHP > 不用iconv库的gb2312与utf-8的互换函数

PHP
新手入门:学习掌握动态网页PHP的编程语句
PHP建设论坛:Discuz!论坛快速架设指南
理解动态网页技术PHP与数组的应用
PHP初学:实例详细学习PHP的简单语法
PHP实例:PHP生成带有雪花背景的网站验证码
PHP网站开发中关于包含路径问题的解决方案
用PHP实现网页开发中的翻页跳转
用PHP程序实现随机广告图片显示
如何使PHP文件与HTML代码更好的分离
PHP关于代码转换问题比较完善的解决办法
新手如何使用PHP创建RSS阅读器
用PHP程序为自己网站打造一个搜索引擎
PHP实现文件安全下载的程序
快速掌握MySQL数据库中SELECT语句
用javascript+php随机显示图片
论Web 2.0 时代PHP的地位
用动态网页技术PHP打造个人网站全攻略
问题解决:无法载入MYSQL扩展,请检查PHP配置
新手入门:PHP网站开发中常见问题汇总
用PHP程序实现删除目录的三种方法实例

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 75 ::
收藏到网摘: n/a


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