不用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 和 MySQL 开发的 8 个技巧
Oct 09 PHP
PHPMYADMIN 简明安装教程 推荐
Mar 07 PHP
php 截取字符串并以零补齐str_pad() 函数
May 07 PHP
Php图像处理类代码分享
Jan 19 PHP
php使用smtp发送支持附件的邮件示例
Apr 13 PHP
php cookie名使用点号(句号)会被转换
Oct 23 PHP
php使用sql server验证连接数据库的方法
Dec 25 PHP
PHP将HTML转换成文本的实现代码
Jan 21 PHP
php实现httpRequest的方法
Mar 13 PHP
php输出xml属性的方法
Mar 19 PHP
php获取错误信息的方法
Jul 17 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
Oct 28 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
「OVERLORD」动画重要删减!雅儿贝德的背叛?至尊猎杀队结成
2020/04/09 日漫
浅析php变量修饰符static的使用
2013/06/28 PHP
php输出1000以内质数(素数)示例
2014/02/16 PHP
PHP数据对象PDO操作技巧小结
2016/09/27 PHP
jquery select选中的一个小问题
2009/10/11 Javascript
Jquery中显示隐藏的实现代码分析
2011/07/26 Javascript
NodeJS 模块开发及发布详解分享
2012/03/07 NodeJs
JS实现方向键切换输入框焦点的方法
2015/08/19 Javascript
jquery实现适用于门户站的导航下拉菜单效果代码
2015/08/24 Javascript
浅谈Javascript中Object与Function对象
2015/09/26 Javascript
jQuery表格行上移下移和置顶的实现方法
2015/10/08 Javascript
jquery 重写 ajax提交并判断权限后 使用load方法报错解决方法
2016/01/19 Javascript
分享javascript、jquery实用代码段
2016/10/20 Javascript
JavaScript学习笔记--常用的互动方法
2016/12/07 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
Vue动态加载图片在跨域时无法显示的问题及解决方法
2020/03/10 Javascript
nodejs中使用worker_threads来创建新的线程的方法
2021/01/22 NodeJs
解决python写入mysql中datetime类型遇到的问题
2018/06/21 Python
Python批量修改图片分辨率的实例代码
2019/07/04 Python
Python 最强编辑器详细使用指南(PyCharm )
2019/09/16 Python
python 穷举指定长度的密码例子
2020/04/02 Python
如何利用Python识别图片中的文字
2020/05/31 Python
python如何编写类似nmap的扫描工具
2020/11/06 Python
HTML5 Canvas渐进填充与透明实现图像的Mask效果
2013/07/11 HTML / CSS
HTML5 script元素async、defer异步加载使用介绍
2013/08/23 HTML / CSS
四种会话跟踪技术
2015/05/20 面试题
机械设计及其自动化专业推荐信
2013/10/31 职场文书
教师产假请假条范文
2014/04/10 职场文书
2014年乡镇领导个人整改措施
2014/09/19 职场文书
服务明星事迹材料
2014/12/29 职场文书
团员年度个人总结
2015/02/26 职场文书
讲座开场白台词和结束语
2015/05/29 职场文书
2015小学教育教学工作总结
2015/07/21 职场文书
详解Html5项目适配系统深色模式方案总结
2021/04/14 HTML / CSS
python实现过滤敏感词
2021/05/08 Python