不用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 相关文章推荐
dedecms模版制作使用方法
Apr 03 PHP
php仿ZOL分页类代码
Oct 02 PHP
那些年一起学习的PHP(三)
Mar 22 PHP
php中mt_rand()随机数函数用法
Nov 24 PHP
PHP判断网络文件是否存在的方法
Mar 12 PHP
php编写的抽奖程序中奖概率算法
May 14 PHP
php+mysql实现简单的增删改查功能
Jul 13 PHP
php使用ffmpeg获取视频信息并截图的实现方法
May 03 PHP
PHP获取路径和目录的方法总结【必看篇】
Mar 04 PHP
PHP用户注册邮件激活账户的实现代码
May 31 PHP
PHP 7.0新增加的特性介绍
Jun 08 PHP
PHP实现根据密码长度显示安全条
Jul 04 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与C#的值类型指向区别的详解
2013/05/21 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
2014/01/14 PHP
Yii操作数据库的3种方法
2014/03/11 PHP
ThinkPHP之A方法实例讲解
2014/06/20 PHP
ThinkPHP3.2.3数据库设置新特性
2015/03/05 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
2016/07/01 PHP
node.js实现BigPipe详解
2014/12/05 Javascript
javascript伸缩型菜单实现代码
2015/11/16 Javascript
全面解析Bootstrap手风琴效果
2020/04/17 Javascript
javascript类型系统——undefined和null全面了解
2016/07/13 Javascript
react-redux中connect的装饰器用法@connect详解
2018/01/13 Javascript
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
浅谈Angular6的服务和依赖注入
2018/06/27 Javascript
jQuery选择器之层次选择器用法实例分析
2019/02/19 jQuery
JS localStorage存储对象,sessionStorage存储数组对象操作示例
2020/02/15 Javascript
vue各种事件监听实例(小结)
2020/06/24 Javascript
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
python使用wxpython开发简单记事本的方法
2015/05/20 Python
python中引用与复制用法实例分析
2015/06/04 Python
numpy中矩阵合并的实例
2018/06/15 Python
python实现批量解析邮件并下载附件
2018/06/19 Python
python 多线程重启方法
2019/02/18 Python
Python开启线程,在函数中开线程的实例
2019/02/22 Python
python 多维高斯分布数据生成方式
2019/12/09 Python
Python3 实现爬取网站下所有URL方式
2020/01/16 Python
python统计字符串中字母出现次数代码实例
2020/03/02 Python
python关于变量名的基础知识点
2020/03/03 Python
python实现udp聊天窗口
2020/03/31 Python
JAVA和C++的区别
2013/10/06 面试题
教师队伍管理制度
2014/01/14 职场文书
综治维稳工作承诺书
2014/08/30 职场文书
法英专业大学生职业生涯规划范文:衡外情,量己力!
2014/09/23 职场文书
大专毕业生自我鉴定范文(2篇)
2014/09/27 职场文书
国际贸易实训报告
2014/11/05 职场文书
Oracle安装TNS_ADMIN环境变量设置参考
2021/11/01 Oracle
全面盘点MySQL中的那些重要日志文件
2021/11/27 MySQL