不用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二分法在IP地址查询中的应用
Aug 12 PHP
PHP处理excel cvs表格的方法实例介绍
May 13 PHP
PHP实现邮件群发的源码
Jun 18 PHP
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
Dec 21 PHP
浅谈PHP值mysql操作类
Jun 29 PHP
yii2.0整合阿里云oss上传单个文件的示例
Sep 19 PHP
PHP实现的折半查询算法示例
Oct 09 PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
Dec 14 PHP
ThinkPHP 3使用OSS的方法
Jul 19 PHP
PHP PDOStatement::getColumnMeta讲解
Feb 01 PHP
PHP正则判断一个变量是否为正整数的方法
Feb 27 PHP
laravel 框架结合关联查询 when()用法分析
Nov 22 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
require(),include(),require_once()和include_once()区别
2008/03/27 PHP
让PHP显示Facebook的粉丝数量方法
2014/01/08 PHP
PHP简单实现“相关文章推荐”功能的方法
2014/07/19 PHP
yii2局部关闭(开启)csrf的验证的实例代码
2017/07/10 PHP
js href的用法
2010/05/13 Javascript
jquery动画1.加载指示器
2012/08/24 Javascript
Javascript继承(上)——对象构建介绍
2012/11/08 Javascript
使用jQuery管理选择结果
2015/01/20 Javascript
jQuery简单实现隐藏以及显示特效
2015/02/26 Javascript
jQuery实现div拖拽效果实例分析
2016/02/20 Javascript
jQuery soColorPacker 网页拾色器
2016/06/22 Javascript
Angular工具方法学习
2016/12/26 Javascript
基于vue2的table分页组件实现方法
2017/03/20 Javascript
ztree简介_动力节点Java学院整理
2017/07/19 Javascript
微信小程序request请求后台接口php的实例详解
2017/09/20 Javascript
vue 解决循环引用组件报错的问题
2018/09/06 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
javascript设计模式 ? 模板方法模式原理与用法实例分析
2020/04/23 Javascript
vue实现购物车结算功能
2020/06/18 Javascript
[45:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第二场 6.2
2018/06/04 DOTA
介绍Python的Django框架中的静态资源管理器django-pipeline
2015/04/25 Python
简单谈谈python中的语句和语法
2017/08/10 Python
Python 实现简单的shell sed替换功能(实例讲解)
2017/09/29 Python
关于 Python opencv 使用中的 ValueError: too many values to unpack
2019/06/28 Python
tf.concat中axis的含义与使用详解
2020/02/07 Python
Expedia印度尼西亚站:预订酒店、廉价航班和度假套餐
2018/01/31 全球购物
什么是属性访问器
2015/10/26 面试题
火山动力Java笔试题
2014/06/26 面试题
自考生毕业自我鉴定
2013/10/10 职场文书
致短跑运动员广播稿
2014/01/09 职场文书
中介业务员岗位职责
2014/04/09 职场文书
质量安全标语
2014/06/07 职场文书
应届大学生求职信
2014/07/20 职场文书
2015年营业员工作总结
2015/04/23 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书
Java 多线程协作作业之信号同步
2022/05/11 Java/Android