不用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 GeoIP的使用教程
Mar 09 PHP
php json_encode奇怪问题说明
Sep 27 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
Jun 03 PHP
php json与xml序列化/反序列化
Oct 28 PHP
yii框架表单模型使用及以数组形式提交表单数据示例
Apr 30 PHP
PHP中使用匿名函数操作数据库的例子
Nov 17 PHP
php面向对象中static静态属性与方法的内存位置分析
Feb 08 PHP
解读PHP中的垃圾回收机制
Aug 10 PHP
Yii2验证器(Validator)用法分析
Jul 23 PHP
实例介绍PHP中zip_open()函数用法
Feb 15 PHP
在phpstudy集成环境下的nginx服务器下配置url重写
Dec 02 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
Jan 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
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
rephactor 优秀的PHP的重构工具
2011/06/09 PHP
php include和require的区别深入解析
2013/06/17 PHP
php漏洞之跨网站请求伪造与防止伪造方法
2013/08/15 PHP
wamp安装后自定义配置的方法
2014/08/23 PHP
彻底删除thinkphp3.1案例blog标签的方法
2014/12/05 PHP
php中解析带中文字符的url函数分享
2015/01/20 PHP
PHP实现根据图片色界在不同位置加水印的方法
2015/08/08 PHP
Zend Framework实现多文件上传功能实例
2016/03/21 PHP
PHP中类属性与类静态变量的访问方法示例
2016/07/13 PHP
Yii框架弹出框功能示例
2017/01/07 PHP
详解php几行代码实现CSV格式文件输出
2017/07/01 PHP
JAVASCRIPT 对象的创建与使用
2021/03/09 Javascript
picChange 图片切换特效的函数代码
2010/05/06 Javascript
js+CSS实现弹出居中背景半透明div层的方法
2015/02/26 Javascript
深入理解JavaScript系列(29):设计模式之装饰者模式详解
2015/03/03 Javascript
JSON 数据详解及实例代码分析
2017/01/20 Javascript
AngularJS学习第二篇 AngularJS依赖注入
2017/02/13 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
vue scroller返回页面记住滚动位置的实例代码
2018/01/29 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
原生js+canvas实现贪吃蛇效果
2020/08/02 Javascript
python中模块查找的原理与方法详解
2017/08/11 Python
python实现简单点对点(p2p)聊天
2017/09/13 Python
K-means聚类算法介绍与利用python实现的代码示例
2017/11/13 Python
python使用生成器实现可迭代对象
2018/03/20 Python
详谈Numpy中数组重塑、合并与拆分方法
2018/04/17 Python
Python实现京东抢秒杀功能
2021/01/25 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
2021/01/27 Python
CSS3旋转——彩色扇子兼容firefox浏览器
2013/06/04 HTML / CSS
澳大利亚女性快速时尚零售商:Ally Fashion
2018/04/25 全球购物
Does C# support multiple inheritance? (C#支持多重继承吗)
2012/01/04 面试题
应聘教师自荐书
2014/06/16 职场文书
代理人委托书
2014/08/01 职场文书
颐和园导游词400字
2015/01/30 职场文书