您现在的位置: 无忧电子商务网 >> 信息学院 >> 程序开发 >> php >> 正文

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

作者:佚名    信息学院来源:整理    点击数:    更新时间:2008-2-2 我要参与讨论

  关附件: 2442675.ZIP(33kb)

偶然在www.phpx.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);
?>

在google里搜索更多不用iconv库的gb2312与utf-8的互换函数

Google
Web www.51ec.org
  • 上一篇信息学院:

  • 下一篇信息学院:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    我来说两句 对此文章发表了评论
      昵 称: *必填    ·注册用户·
      评 分: 1分 2分 3分 4分 5分     严禁发表危害国家安全、政治、黄色淫秽等内容的评论,用户需对自己在使用本网站服务过程中的行为承担法律责任。本站管理员有权保留或删除评论内容,评论内容只代表机友个人观点,与本网站立场无关。  
    评 论
    内 容

     
    评论列表 (最新 评论仅限网友观点!)

    供求信息




    | 设为首页 | 加入收藏 | 关于我们 | 广告服务 | 联系方式 | 友情链接 | 版权申明