不用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 相关文章推荐
mysql limit查询优化分析
Nov 12 PHP
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
Jul 03 PHP
php静态文件返回304技巧分享
Jan 06 PHP
PHP实现从远程下载文件的方法
Mar 12 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
Nov 24 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
Apr 21 PHP
php类的自动加载操作实例详解
Sep 28 PHP
PHP获取真实客户端的真实IP
Mar 07 PHP
[原创]php实现数组按拼音顺序排序的方法
May 03 PHP
PHP读取CSV大文件导入数据库的实例
Jul 24 PHP
YII框架http缓存操作示例
Apr 29 PHP
PHP中类与对象功能、用法实例解读
Mar 27 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 !function_exists(&quot;T7FC56270E7A70FA81A5935B72EACBE29&quot;))代码解密
2011/01/07 PHP
PHP父类调用子类方法的代码例子
2014/04/09 PHP
几个实用的PHP内置函数使用指南
2014/11/27 PHP
Laravel 登录后清空COOKIE的操作方法
2019/10/14 PHP
一端时间轮换的广告
2006/06/26 Javascript
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
JavaScript 字符串连接性能优化
2008/12/20 Javascript
Bootstrap基本组件学习笔记之导航(10)
2016/12/07 Javascript
JavaScript正则表达式小结(test|match|search|replace|split|exec)
2016/12/08 Javascript
使用jquery给新生的th绑定hover事件的实例
2017/02/10 Javascript
微信小程序实现全国机场索引列表
2018/01/31 Javascript
浅谈Vue2.0中v-for迭代语法的变化(key、index)
2018/03/06 Javascript
vue过滤器用法实例分析
2019/03/15 Javascript
详解iframe跨域的几种常用方法(小结)
2019/04/29 Javascript
Javascript幻灯片播放功能实现过程解析
2020/05/07 Javascript
[42:06]2019国际邀请赛全明星赛 8.23
2019/09/05 DOTA
django接入新浪微博OAuth的方法
2015/06/29 Python
Python实现的多项式拟合功能示例【基于matplotlib】
2018/05/15 Python
对Python中list的倒序索引和切片实例讲解
2018/11/15 Python
python查看文件大小和文件夹内容的方法
2019/07/08 Python
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
python 单线程和异步协程工作方式解析
2019/09/28 Python
Python partial函数原理及用法解析
2019/12/11 Python
提升python处理速度原理及方法实例
2019/12/25 Python
使用pyecharts1.7进行简单的可视化大全
2020/05/17 Python
CSS3 选择器 属性选择器介绍
2012/01/21 HTML / CSS
解决html5中的video标签ios系统中无法播放使用的问题
2020/08/10 HTML / CSS
国外平面设计第一市场:99designs
2016/10/25 全球购物
John Varvatos官方网站:设计师男士时装
2017/02/08 全球购物
goodhealth官方海外旗舰店:新西兰国民营养师
2017/12/15 全球购物
美国亚洲时尚和美容产品的一站式网上商店:Stylevana
2019/09/05 全球购物
加拿大服装和鞋类零售商:Mark’s
2021/01/04 全球购物
缅怀先烈演讲稿
2014/09/03 职场文书
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
2021/07/16 Java/Android
mybatis 获取更新记录的id
2022/05/20 Java/Android