不用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 相关文章推荐
第九节--绑定
Nov 16 PHP
PHP中include()与require()的区别说明
Mar 10 PHP
php中神奇的fastcgi_finish_request
May 02 PHP
基于PHP CURL获取邮箱地址的详解
Jun 03 PHP
php微信公众开发之获取周边酒店信息的方法
Dec 22 PHP
php中的观察者模式简单实例
Jan 20 PHP
基于JQuery+PHP编写砸金蛋中奖程序
Sep 08 PHP
golang与PHP输出excel示例
Jul 22 PHP
php操作路径的经典方法(必看篇)
Oct 04 PHP
php使用array_chunk函数将一个数组分割成多个数组
Dec 05 PHP
YII框架常用技巧总结
Apr 27 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
Sep 17 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邮箱验证示例教程
2016/06/01 PHP
单击复制文字兼容各浏览器的完美解决方案
2013/07/04 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
jquery实现多行文字图片滚动效果示例代码
2014/10/10 Javascript
轻松掌握JavaScript状态模式
2016/09/07 Javascript
jQuery实现的无限级下拉菜单功能示例
2016/09/12 Javascript
BootStrap入门教程(二)之固定的内置样式
2016/09/19 Javascript
详解JavaScript 中getElementsByName在IE中的注意事项
2017/02/21 Javascript
vue 实现滚动到底部翻页效果(pc端)
2019/07/31 Javascript
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
解决vue-router 二级导航默认选中某一选项的问题
2019/11/01 Javascript
小程序实现按下录音松开识别语音
2019/11/22 Javascript
vue 动态生成拓扑图的示例
2021/01/03 Vue.js
[45:40]Ti4 冒泡赛第二天NEWBEE vs NaVi 1
2014/07/15 DOTA
[01:17:55]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
Python实现求一个集合所有子集的示例
2018/05/04 Python
python3基于TCP实现CS架构文件传输
2018/07/28 Python
python如何制作缩略图
2019/04/30 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
Django Rest framework认证组件详细用法
2019/07/25 Python
Centos7 下安装最新的python3.8
2019/10/28 Python
python pyqtgraph 保存图片到本地的实例
2020/03/14 Python
python print 格式化输出,动态指定长度的实现
2020/04/12 Python
python 5个实用的技巧
2020/09/27 Python
英国派对礼服和连衣裙购物网站:TFNC London
2018/07/07 全球购物
早会主持词
2014/03/17 职场文书
气象学专业个人求职信
2014/04/22 职场文书
销售口号大全
2014/06/11 职场文书
起诉离婚协议书样本
2014/11/25 职场文书
涨价通知
2015/04/23 职场文书
搞笑结婚保证书
2015/05/08 职场文书
2015年英语教研组工作总结
2015/05/23 职场文书
超级实用的公文标题大全!
2019/07/19 职场文书
OpenCV绘制圆端矩形的示例代码
2021/08/30 Python
深入解读Java三大集合之map list set的用法
2021/11/11 Java/Android
win10音频服务未响应怎么解决?win10音频服务未响应未修复的解决方法
2022/08/14 数码科技