频道直达 - 专题 - 新闻 - 基础 - 高级 - 安装 - 技巧 - 数据库 - 手册 - PHP - Linux - Java - MySQL - Apache - 麻辣堂 - 狼盟 - Rails社群 - 搜索 - 下载 - 开源 - 论坛
PHP开发资源网 主页>>PHP基础教程>> 收藏此文 | 收藏本站 | 设为首页

不用iconv库的gb2312与utf-8的互换函数

来源:www.phpres.com 作者:马天 出处:www.phpres.com 2007-7-22 18:14:29 进入讨论组
关 键 词: 不用iconv库的gb2312与utf-8的互换函数

偶然在www.phpres.com见到一份gb2312与utf-8的对照表在征询代码,于是写了几段代码。小试了一下,感觉还可以。给大家分享一下。
一份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开发资源网奋斗目标
阅读排行:
热门技术文档
最新图文档
本站编辑推荐:(本站开通Delphi4PHP专区,欢迎进入论坛交流!)
编缉最近更新文章
网站赞助商
搜索您感兴趣的内容
 
   网站首页 -  网站地图 -  网站合作 -  手册中心 -  通用网址 -  网站论坛 -  网站投稿 -  友情链接 -  帮助中心
版权所有:PHP开发资源网 © 2003-2008 通用网址:PHP资源网 合作媒体: 赛迪网IT技术
互联网违法和不良信息举报中心 | 不良信息举报信箱