不用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 相关文章推荐
最省空间的计数器
Oct 09 PHP
php 中文处理函数集合
Aug 27 PHP
程序员编程十条戒律
Jul 09 PHP
一个典型的PHP分页实例代码分享
Jul 28 PHP
基于PHP输出缓存(output_buffering)的深入理解
Jun 13 PHP
php-fpm配置详解
Feb 12 PHP
PHP图片处理之图片背景、画布操作
Nov 19 PHP
详解Laravel视图间共享数据与视图Composer
Aug 04 PHP
详解PHP数据压缩、加解密(pack, unpack)
Dec 17 PHP
PHP执行shell脚本运行程序不产生core文件的方法
Dec 28 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
Aug 07 PHP
PHP中PDO事务处理操作示例
May 02 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
jQuery 各种浏览器下获得日期区别
2008/12/22 Javascript
jQuery 处理网页内容的实现代码
2010/02/15 Javascript
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
基于jQuery的公告无限循环滚动实现代码
2012/05/11 Javascript
原生js实现半透明遮罩层效果具体代码
2013/06/06 Javascript
下拉列表选择项的选中在不同浏览器中的兼容性问题探讨
2013/09/18 Javascript
JS实现的生成随机数的4个函数分享
2015/02/11 Javascript
jQuery获取与设置iframe高度的方法
2016/08/01 Javascript
prototype与__proto__区别详细介绍
2017/01/09 Javascript
js实现百度搜索提示框
2017/02/05 Javascript
jQuery插件FusionCharts绘制的2D帕累托图效果示例【附demo源码】
2017/03/28 jQuery
js对象实例详解(JavaScript对象深度剖析,深度理解js对象)
2017/09/21 Javascript
nodejs实现大文件(在线视频)的读取
2020/10/16 NodeJs
vue填坑之webpack run build 静态资源找不到的解决方法
2018/09/03 Javascript
vuejs router history 配置到iis的方法
2018/09/20 Javascript
浅谈Vue使用Elementui修改默认的最快方法
2020/12/05 Vue.js
[05:49]2014DOTA2TI4正赛第二日综述 昔日冠军纷纷落马 VG LGD占尽先机
2014/07/20 DOTA
[00:57]林俊杰助阵DOTA2亚洲邀请赛
2015/01/28 DOTA
python网络爬虫采集联想词示例
2014/02/11 Python
跟老齐学Python之有点简约的元组
2014/09/24 Python
python列表list保留顺序去重的实例
2018/12/14 Python
Python 调用PIL库失败的解决方法
2019/01/08 Python
520使用Python实现“我爱你”表白
2020/05/20 Python
python3.5的包存放的具体路径
2020/08/16 Python
英国羊绒服装购物网站:Pure Collection
2018/10/22 全球购物
若通过ObjectOutputStream向一个文件中多次以追加方式写入object,为什么用ObjectInputStream读取这些object时会产生StreamCorruptedException?
2016/10/17 面试题
学校七一活动方案
2014/01/19 职场文书
大学竞选班干部演讲稿
2014/08/21 职场文书
关于读书的演讲稿800字
2014/08/27 职场文书
公务员上班玩游戏检讨书
2014/09/17 职场文书
单位考核聘任报告
2015/03/02 职场文书
婚庆主持词大全
2015/06/30 职场文书
Python用tkinter实现自定义记事本的方法详解
2022/03/31 Python
vue elementUI批量上传文件
2022/04/26 Vue.js
SpringCloud超详细讲解Feign声明式服务调用
2022/06/21 Java/Android