不用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
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
Mar 13 PHP
PHP初学者常见问题集合 修正版(21问答)
Mar 23 PHP
PHP操作MongoDB GridFS 存储文件的详解
Jun 20 PHP
PHP的构造方法,析构方法和this关键字详细介绍
Oct 22 PHP
php调用C代码的实现方法
Mar 11 PHP
ThinkPHP实现事务回滚示例代码
Jun 23 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
Oct 31 PHP
php使用NumberFormatter格式化货币的方法
Mar 21 PHP
php实现短信发送代码
Jul 05 PHP
php+webSoket实现聊天室示例代码(附源码)
Feb 17 PHP
Yii实现微信公众号场景二维码的方法实例
Aug 30 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
水质对咖图啡风味的影响具体有哪些
2021/03/03 冲泡冲煮
浅析PHP数据导出知识点
2018/02/17 PHP
浅析PHP7 的垃圾回收机制
2019/09/06 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
2020/11/27 PHP
你真的了解JavaScript吗?
2007/02/24 Javascript
javascript背投广告代码的完善
2008/04/08 Javascript
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
2009/12/03 Javascript
JS Excel读取和写入操作(模板操作)实现代码
2010/04/11 Javascript
JQuery实现可直接编辑的表格
2015/04/16 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
2018/06/07 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
d3.js实现图形拖拽
2019/12/19 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
微信小程序自定义扫码功能界面的实现代码
2020/07/02 Javascript
[50:15]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
[01:05:07]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第一场2月1日
2021/03/11 DOTA
CentOS 6.5下安装Python 3.5.2(与Python2并存)
2017/06/05 Python
Python JSON格式数据的提取和保存的实现
2019/03/22 Python
python 设置输出图像的像素大小方法
2019/07/04 Python
python中struct模块之字节型数据的处理方法
2019/08/27 Python
详解Python3定时器任务代码
2019/09/23 Python
python实现KNN分类算法
2019/10/16 Python
Pycharm修改python路径过程图解
2020/05/22 Python
python hmac模块验证客户端的合法性
2020/11/07 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
html5响应式开发自动计算fontSize的方法
2020/01/13 HTML / CSS
机电一体化职业规划书
2014/01/07 职场文书
《搭石》教学反思
2014/04/07 职场文书
拾金不昧表扬信
2015/01/16 职场文书
音乐教师求职信范文
2015/03/20 职场文书
捐书活动倡议书
2015/04/27 职场文书
单位证明范文
2015/06/18 职场文书
高中化学教学反思
2016/02/22 职场文书
python状态机transitions库详解
2021/06/02 Python
Vue-Element-Admin集成自己的接口实现登录跳转
2021/06/23 Vue.js
Golang并发操作中常见的读写锁详析
2021/08/30 Golang