不用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&amp;java(一)
Oct 09 PHP
php验证是否是md5编码的简单代码
Apr 01 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
Jun 23 PHP
PHP实现取得HTTP请求的原文
Aug 18 PHP
php分割合并两个字符串的函数实例
Jun 19 PHP
php抓取网站图片并保存的实现方法
Oct 29 PHP
php投票系统之增加与删除投票(管理员篇)
Jul 01 PHP
php版微信自动获取收货地址api用法示例
Sep 22 PHP
PHP实现RTX发送消息提醒的实例代码
Jan 03 PHP
PHP中overload与override的区别
Feb 13 PHP
Yii2语言国际化的配置教程
Aug 19 PHP
PHP使用Http Post请求发送Json对象数据代码解析
Jul 16 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产生随机字符串函数
2006/12/06 PHP
php图片的裁剪与缩放生成符合需求的缩略图
2013/01/11 PHP
基于simple_html_dom的使用小结
2013/07/01 PHP
PHP程序员不应该忽略的3点
2015/10/09 PHP
ZF框架实现发送邮件的方法
2015/12/03 PHP
PHPExcel简单读取excel文件示例
2016/05/26 PHP
Fleaphp常见函数功能与用法示例
2016/11/15 PHP
javascript 打开页面window.location和window.open的区别
2010/03/17 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(下:动画篇)
2010/03/24 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
2014/04/20 Javascript
JavaScript中关联原型链属性特性
2016/02/13 Javascript
javascript冒泡排序小结
2016/04/10 Javascript
javascript特殊文本输入框网页特效
2016/09/13 Javascript
javascript 正则表达式去空行方法
2017/01/24 Javascript
Angular4学习教程之DOM属性绑定详解
2018/01/04 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
koa+jwt实现token验证与刷新功能
2019/05/30 Javascript
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
你可能从未使用过的11+个JavaScript特性(小结)
2020/01/08 Javascript
公众号SVG动画交互实战代码
2020/05/31 Javascript
vue3.0中友好使用antdv示例详解
2021/01/05 Vue.js
Python中的yield浅析
2014/06/16 Python
Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子
2019/12/04 Python
Python bisect模块原理及常见实例
2020/06/17 Python
python如何绘制疫情图
2020/09/16 Python
.net开发工程师面试题
2014/02/25 面试题
银行会计财务工作个人的自我评价
2013/10/29 职场文书
大四学生找工作的自荐信
2014/03/27 职场文书
放飞梦想演讲稿200字
2014/08/26 职场文书
2014年人事科工作总结
2014/11/19 职场文书
2015暑期社会实践调查报告
2015/07/14 职场文书
2015年信息化建设工作总结
2015/07/23 职场文书
机关单位2016年创先争优活动总结
2016/04/05 职场文书
《初涉尘世》读后感3篇
2020/01/10 职场文书
python生成随机数、随机字符、随机字符串
2021/04/06 Python