不用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 Zip压缩 在线对文件进行压缩的函数
May 26 PHP
php 过滤器实现代码
Aug 09 PHP
PHP的PSR规范中文版
Sep 28 PHP
迅速确定php多维数组的深度的方法
Jan 07 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
Apr 21 PHP
PHP实现生成唯一会员卡号
Aug 24 PHP
PHP5.3新特性小结
Feb 14 PHP
浅谈PHP中如何实现Hook机制
Nov 14 PHP
TP5(thinkPHP5框架)基于bootstrap实现的单图上传插件用法示例
May 29 PHP
php和html的区别点详细总结
Sep 24 PHP
PHP如何使用cURL实现Get和Post请求
Jul 11 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 date函数参数详解
2006/11/27 PHP
php查看session内容的函数
2008/08/27 PHP
通达OA公共代码 php常用检测函数
2011/12/14 PHP
php实现格式化多行文本为Js可用格式
2015/04/15 PHP
总结PHP中DateTime的常用方法
2016/08/11 PHP
如何用javascript去掉字符串里的所有空格
2007/02/08 Javascript
理解Javascript_02_理解undefined和null
2010/10/11 Javascript
表单JS弹出填写提示效果代码
2011/04/16 Javascript
jquery.validate.js插件使用经验记录
2014/07/02 Javascript
js触发select onchange事件的小技巧
2014/08/05 Javascript
使用Plupload实现直接上传附件至七牛云存储
2014/12/26 Javascript
jQuery功能函数详解
2015/02/01 Javascript
JavaScript 事件入门知识
2015/04/13 Javascript
jquery+html5时钟特效代码分享(可设置闹钟并且语音提醒)
2020/03/30 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
微信小程序 request接口的封装实例代码
2017/04/26 Javascript
JavaScript寄生组合式继承实例详解
2018/01/06 Javascript
自定义Vue中的v-module双向绑定的实现
2019/04/17 Javascript
基于JS实现父组件的请求服务过程解析
2019/10/14 Javascript
原生JavaScript实现滑动拖动验证的示例代码
2019/12/06 Javascript
python多线程threading.Lock锁用法实例
2014/11/01 Python
Python编写屏幕截图程序方法
2015/02/18 Python
python操作oracle的完整教程分享
2018/01/30 Python
selenium+python实现自动登录脚本
2018/04/22 Python
Python批量发送post请求的实现代码
2018/05/05 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
2019/06/26 Python
python3.5 cv2 获取视频特定帧生成jpg图片
2019/08/28 Python
初次部署django+gunicorn+nginx的方法步骤
2019/09/11 Python
你应该知道的Python3.6、3.7、3.8新特性小结
2020/05/12 Python
基于python实现计算两组数据P值
2020/07/10 Python
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
HTML5中判断用户是否正在浏览页面的方法
2014/05/03 HTML / CSS
办公室经理岗位职责
2014/01/01 职场文书
战友聚会邀请函
2014/01/18 职场文书
逃课打麻将检讨书
2014/10/05 职场文书
个人年终总结怎么写
2015/03/09 职场文书