不用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 相关文章推荐
ThinkPHP php 框架学习笔记
Oct 30 PHP
PHP如何解决网站大流量与高并发的问题
Jun 25 PHP
php生成局部唯一识别码LUID的代码
Oct 06 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
Apr 10 PHP
ThinkPHP3.1新特性之命名范围的使用
Jun 19 PHP
Zend Framework教程之模型Model用法简单实例
Mar 04 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
Apr 07 PHP
CI框架数据库查询之join用法分析
May 18 PHP
thinkPHP实现签到功能的方法
Mar 15 PHP
阿里云Win2016安装Apache和PHP环境图文教程
Mar 11 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
Sep 05 PHP
Laravel如何实现自动加载类
Oct 14 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
长波知识介绍
2021/03/01 无线电
深入探讨PHP中的内存管理问题
2011/08/31 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
2014/08/08 PHP
php与Mysql的一些简单的操作
2015/02/26 PHP
php通过sort()函数给数组排序的方法
2015/03/18 PHP
浅谈PHP的反射API
2017/02/26 PHP
JS上传图片前的限制包括(jpg jpg gif及大小高宽)等
2012/12/19 Javascript
js获取某元素的class里面的css属性值代码
2014/01/16 Javascript
JavaScript中标识符提升问题
2015/06/11 Javascript
jQuery在线选座位插件seat-charts特效代码分享
2015/08/27 Javascript
JavaScript判断表单为空及获取焦点的方法
2016/02/12 Javascript
jQuery内容折叠效果插件用法实例分析(附demo源码)
2016/04/28 Javascript
vue.js初学入门教程(2)
2016/11/07 Javascript
Ajax验证用户名或昵称是否已被注册
2017/04/05 Javascript
Vue实现typeahead组件功能(非常靠谱)
2017/08/26 Javascript
vue-cli脚手架config目录下index.js配置文件的方法
2018/03/13 Javascript
koa2的中间件功能及应用示例
2020/03/05 Javascript
[03:16]DOTA2完美大师赛主赛事首日集锦
2017/11/23 DOTA
动态创建类实例代码
2009/10/07 Python
解决Python中字符串和数字拼接报错的方法
2016/10/23 Python
Python的语言类型(详解)
2017/06/24 Python
使用11行Python代码盗取了室友的U盘内容
2018/10/23 Python
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
Python matplotlib生成图片背景透明的示例代码
2019/08/30 Python
Pandas 解决dataframe的一列进行向下顺移问题
2019/12/27 Python
Python计算机视觉里的IOU计算实例
2020/01/17 Python
python判断两个序列的成员是否一样的实例代码
2020/03/01 Python
python实现提取COCO,VOC数据集中特定的类
2020/03/10 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
2020/04/16 Python
eBay澳大利亚站:eBay.com.au
2018/02/02 全球购物
俄罗斯茶和咖啡网上商店:Tea.ru
2021/01/26 全球购物
金融专业毕业生自荐信
2014/06/26 职场文书
供电工程专业求职信
2014/08/09 职场文书
推荐信范文大全
2015/03/27 职场文书
2016年党员干部廉政承诺书
2016/03/24 职场文书
pytorch加载预训练模型与自己模型不匹配的解决方案
2021/05/13 Python