不用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扩展” 的解决方法
Apr 16 PHP
使用PHP获取当前url路径的函数以及服务器变量
Jun 29 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
Oct 16 PHP
PHP把JPEG图片转换成Progressive JPEG的方法
Jun 30 PHP
30个php操作redis常用方法代码例子
Jul 05 PHP
使用Thinkphp框架开发移动端接口
Aug 05 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
Mar 15 PHP
php生成Android客户端扫描可登录的二维码
May 13 PHP
微信支付PHP SDK ―― 公众号支付代码详解
Sep 13 PHP
php中引用&amp;的用法分析【变量引用,函数引用,对象引用】
Dec 12 PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
Nov 24 PHP
PHP时间戳和日期相互转换操作实例小结
Dec 18 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递归创建和删除文件夹的代码小结
2012/04/13 PHP
php按百分比生成缩略图的代码分享
2014/05/10 PHP
PHP中key和current,next的联合运用实例分析
2016/03/29 PHP
php通过执行CutyCapt命令实现网页截图的方法
2016/09/30 PHP
ThinkPHP 3.2.3实现页面静态化功能的方法详解
2017/08/03 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
执行iframe中的javascript方法
2008/10/07 Javascript
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
jquery的总体架构分析及实现示例详解
2014/11/08 Javascript
jQuery对指定元素中指定字符串进行替换的方法
2015/03/17 Javascript
WordPress 单页面上一页下一页的实现方法【附代码】
2016/03/10 Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
2016/12/09 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
JS中正则表达式要注意lastIndex属性
2017/08/08 Javascript
JavaScript创建对象的七种方式全面总结
2017/08/21 Javascript
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
vue引入ueditor及node后台配置详解
2018/01/03 Javascript
vue中使用input[type=&quot;file&quot;]实现文件上传功能
2018/09/10 Javascript
node上的redis调用优化示例详解
2018/10/30 Javascript
Nodejs监控事件循环异常示例详解
2019/09/22 NodeJs
nuxt.js服务端渲染中axios和proxy代理的配置操作
2020/11/06 Javascript
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
跟老齐学Python之编写类之三子类
2014/10/11 Python
python发送HTTP请求的方法小结
2015/07/08 Python
利用python画出折线图
2018/07/26 Python
Python元组知识点总结
2019/02/18 Python
Python使用统计函数绘制简单图形实例代码
2019/05/15 Python
Pytorch自己加载单通道图片用作数据集训练的实例
2020/01/18 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
2020/06/03 Python
Python根据指定文件生成XML的方法
2020/06/29 Python
keras实现VGG16 CIFAR10数据集方式
2020/07/07 Python
css3 伪元素和伪类选择器详解
2014/09/04 HTML / CSS
护士岗位职责
2014/02/16 职场文书
文明寄语大全
2014/04/11 职场文书
简单租房协议书(范本)
2014/10/13 职场文书
Spring boot应用启动后首次访问很慢的解决方案
2021/06/23 Java/Android