易客CRM,中小企业最忠实的合作伙伴!

求不用Iconf把UTF-8转化为GB2312方案(PHP)

885℃

如题,谢谢帮助!
已找到一个解决方案,但是在我的机器上运行不正常,所以请求新的方案。原来的方案如下:
<?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]);
}

//测试
echo "begin encode\n";
$s = gb2utf8(‘这是对照表的测试’, $charset);
echo "utf82gb begin\n";
echo utf82gb($s, $charset);
?>

转载请注明:易客CRM官方博客 » 求不用Iconf把UTF-8转化为GB2312方案(PHP)

喜欢 (0)or分享 (0)