不用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 相关文章推荐
PHP生成便于打印的网页
Oct 09 PHP
生成ubuntu自动切换壁纸xml文件的php代码
Jul 17 PHP
smarty 缓存控制前的页面静态化原理
Mar 15 PHP
PHP5常用函数列表(分享)
Jun 07 PHP
php简单定时执行任务的实现方法
Feb 23 PHP
PHP的全局错误处理详解
Apr 25 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
Sep 01 PHP
PHP+Session防止表单重复提交的解决方法
Apr 09 PHP
PHP命名空间namespace及use的简单用法分析
Aug 03 PHP
thinkPHP框架实现的简单计算器示例
Dec 07 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 PHP
TP5框架实现签到功能的方法分析
Apr 05 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
php小偷相关截取函数备忘
2010/11/28 PHP
通过PHP的内置函数,通过DES算法对数据加密和解密
2012/06/21 PHP
symfony2.4的twig中date用法分析
2016/03/18 PHP
Yii2前后台分离及migrate使用(七)
2016/05/04 PHP
PHP使用标准库spl实现的观察者模式示例
2018/08/04 PHP
JavaScript-世界上误解最深的语言分析
2007/08/12 Javascript
基于Jquery实现表格动态分页实现代码
2011/06/21 Javascript
使用GruntJS链接与压缩多个JavaScript文件过程详解
2013/08/02 Javascript
JS获取网页图片name属性的方法
2015/04/01 Javascript
js实现向右横向滑出的二级菜单效果
2015/08/27 Javascript
bootstrapValidator自定验证方法写法
2016/12/01 Javascript
jQuery插件JWPlayer视频播放器用法实例分析
2017/01/11 Javascript
关于js的三种使用方式(行内js、内部js、外部js)的程序代码
2018/05/05 Javascript
深入理解js A*寻路算法原理与具体实现过程
2018/12/13 Javascript
详解小程序云开发数据库
2019/05/20 Javascript
iview的table组件自带的过滤器实现
2019/07/12 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
three.js显示中文字体与tween应用详析
2021/01/04 Javascript
python3.3使用tkinter开发猜数字游戏示例
2014/03/14 Python
简单的连接MySQL与Python的Bottle框架的方法
2015/04/30 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
2018/11/23 Python
对python特殊函数 __call__()的使用详解
2019/07/02 Python
领先的钻石和订婚戒指零售商:Diamonds-USA
2016/12/11 全球购物
Schecker荷兰:狗狗用品和配件
2019/06/06 全球购物
Madewell澳大利亚官方网站:美国休闲服饰品牌
2019/07/18 全球购物
在校大学生个人的自我评价
2014/02/13 职场文书
改进作风怎么办发言材料
2014/08/17 职场文书
党的群众路线教育实践活动对照检查材料思想汇报(党员篇)
2014/09/25 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
小学生光盘行动倡议书
2015/04/28 职场文书
付款证明模板
2015/06/19 职场文书
初中同学会致辞
2015/08/01 职场文书
2016春季运动会前导词
2015/11/25 职场文书
Python装饰器的练习题
2021/11/23 Python
一条 SQL 语句执行过程
2022/03/17 MySQL
Tomcat执行startup.bat出现闪退的原因及解决办法
2022/04/20 Servers