快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

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

关附件: 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);
?>


返回类别: 教程
上一教程: PHP4与MySQL数据库操作函数详解(三)
下一教程: PHP编程的文件资源治理一例

您可以阅读与"不用iconv库的gb2312与utf-8的互换函数"相关的教程:
· 在PHP中进行GB2312与UTF-8的互换
· UTF-8转变成GB2312的全处理
· 在PHP3中实现SESSION的功能(附、COOKIE函数库的使用:test_cookie.php3)
· UTF-8 , GBK , GB2312 编码规则与检测
· 不用数据库的多用户文件自由上传投票系统(3)
    微笑服务 优质保证 索取样品