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


Posted in PHP onOctober 09, 2006

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

PHP 相关文章推荐
echo(),print(),print_r()之间的区别?
Nov 19 PHP
Discuz 6.0+ 批量注册用户名
Sep 13 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
May 05 PHP
PHP中调用SVN命令更新网站方法
Jan 07 PHP
php源码分析之DZX1.5随机数函数random用法
Jun 17 PHP
PHP面向对象继承用法详解(优化与减少代码重复)
Dec 02 PHP
php常用正则函数实例小结
Dec 29 PHP
laravel 5.4中实现无限级分类的方法示例
Jul 27 PHP
php正确输出json数据的实例讲解
Aug 21 PHP
实例讲解PHP表单验证功能
Feb 15 PHP
Laravel 微信小程序后端搭建步骤详解
Nov 26 PHP
TP5框架使用QueryList采集框架爬小说操作示例
Mar 26 PHP
PHP的历史和优缺点
Oct 09 #PHP
新版PHP将向Java靠拢
Oct 09 #PHP
JAVA/JSP学习系列之七
Oct 09 #PHP
PHP开发大型项目的一点经验
Oct 09 #PHP
JAVA/JSP学习系列之六
Oct 09 #PHP
PHP的宝库目录--PEAR
Oct 09 #PHP
PHP中调用JAVA
Oct 09 #PHP
You might like
WordPress中邮件的一些修改和自定义技巧
2015/12/15 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
javaScript面向对象继承方法经典实现
2013/08/20 Javascript
jquery ajax jsonp跨域调用实例代码
2013/12/11 Javascript
js采用map取到id集合组并且实现点击一行选中一行
2013/12/16 Javascript
一个简单的实现下拉框多选的插件可移植性比较好
2014/05/05 Javascript
setInterval计时器不准的问题解决方法
2014/05/08 Javascript
使用iojs的jsdom库实现同步系统时间
2015/04/20 Javascript
javascript动态创建链接的方法
2015/05/13 Javascript
使用微信内置浏览器点击下拉框出现页面乱跳转现象(iphone),该怎么办
2016/01/04 Javascript
JavaScript实现多种排序算法
2016/02/24 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
微信小程序 textarea 组件详解及简单实例
2017/01/10 Javascript
详解angularJs模块ui-router之状态嵌套和视图嵌套
2017/04/28 Javascript
three.js 入门案例详解
2018/01/23 Javascript
JavaScript实现百度搜索框效果
2020/03/26 Javascript
Node.js使用Angular简单示例
2018/05/11 Javascript
浅谈Vue.js组件(二)
2019/04/09 Javascript
详解Webpack如何引入CDN链接来优化编译后的体积
2019/06/21 Javascript
element form 校验数组每一项实例代码
2019/10/10 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
[30:51]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第一局
2016/03/04 DOTA
Python Web开发模板引擎优缺点总结
2014/05/06 Python
Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法
2015/04/24 Python
详解Django中的权限和组以及消息
2015/07/23 Python
selenium+python 对输入框的输入处理方法
2018/10/11 Python
在windows下使用python进行串口通讯的方法
2019/07/02 Python
如何在scrapy中集成selenium爬取网页的方法
2020/11/18 Python
建筑系毕业生自我鉴定
2014/01/24 职场文书
工程学毕业生自荐信
2014/06/14 职场文书
大学生作弊检讨书
2014/09/11 职场文书
个人投资合作协议书
2014/10/12 职场文书
单位接收证明格式
2015/06/18 职场文书
运动会致辞稿
2015/07/29 职场文书
2016年领导干部正风肃纪心得体会
2015/10/09 职场文书
反四风问题学习心得体会
2016/01/22 职场文书