文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>不用iconv函数实现UTF-8编码转换GB2312的PHP函数

不用iconv函数实现UTF-8编码转换GB2312的PHP函数

时间:2008-05-29  来源:剑心通明

如果使用 iconv() 函数转换编码就相比比较简单了,不过很多虚拟主机里并不支持这个组件,我在网上找半天,才找到一个gb2312转utf-8的方法,但不能逆向转换。

这个函数如下:
以下为引用的内容:
*******************************
//GB转UTF-8编码
*******************************/
function gb2utf8($gbstr) {
global $CODETABLE;
if(trim($gbstr)=="") return $gbstr;
if(empty($CODETABLE)){
  $filename = dirname(__FILE__)."/gb2312-utf8.table";
  $fp = fopen($filename,"r");
  while ($l = fgets($fp,15))
  { $CODETABLE[hexdec(substr($l, 0, 6))] = substr($l, 7, 6); }
  fclose($fp);
}
$ret = "";
$utf8 = "";
while ($gbstr) {
  if (ord(substr($gbstr, 0, 1)) > 127) {
   $thisW = substr($gbstr, 0, 2);
   $gbstr = substr($gbstr, 2, strlen($gbstr));
   $utf8 = "";
   @$utf8 = u2utf8(hexdec($CODETABLE[hexdec(bin2hex($thisW)) - 0x8080]));
   if($utf8!=""){
    for ($i = 0;$i > 6);
  $str .= (0x80 | $c & 0x3F);
} else if ($c > 12);
  $str .= (0x80 | $c >> 6 & 0x3F);
  $str .= (0x80 | $c & 0x3F);
} else if ($c > 18);
  $str .= (0x80 | $c >> 12 & 0x3F);
  $str .= (0x80 | $c >> 6 & 0x3F);
  $str .= (0x80 | $c & 0x3F);
}
return $str;
}
因为gb2312都是双字节的,因此转换为utf-8就相对比较简单,但反之有很麻烦了,我尝试了一下:
这样
function utf82gb($utfstr)
{
global $UC2GBTABLE;
$okstr = "";
if(trim($utfstr)=="") return $utfstr;
if(empty($UC2GBTABLE)){
  $filename = dirname(__FILE__)."/gb2312-utf8.table";
  $fp = fopen($filename,"r");
  while($l = fgets($fp,15))
  { $UC2GBTABLE[hexdec(substr($l, 7, 6))] = hexdec(substr($l, 0, 6));}
  fclose($fp);
}
$ulen = strlen($utfstr);
for($i=0;$i$i+2)
   {
    $utfc = substr($utfstr,$i,3);
    $c = "";
    @$c = dechex($UC2GBTABLE[utf82u_3($utfc)]+0x8080);
    if($c!=""){
       $okstr .= chr(hexdec($c[0].$c[1])).chr(hexdec($c[2].$c[3]));
    }
   }
   else
   { $okstr .= $utfstr[$i]; }
  }
  }
  $okstr = trim($okstr);
  return $okstr;
}
function utf82u_3($c)
{
      $n = (ord($c[0]) & 0x1f) $i+2){
    $hexnext = hexdec("0x".substr($utfstr,$i+1,2));
    if($hexnext=$i+9){
      $hexnext = substr($utfstr,$i+1,8);
      $c = "";
      @$c = dechex($UC2GBTABLE[url_utf2u($hexnext)]+0x8080);
      if($c!=""){
        $okstr .= chr(hexdec($c[0].$c[1])).chr(hexdec($c[2].$c[3]));
      }
      $i = $i+8;
     }
    }
   }
   else
   { $okstr .= $utfstr[$i]; }
  }
  else if($utfstr[$i]=="+")
   $okstr .= " ";
  else
   $okstr .= $utfstr[$i];
}
$okstr = trim($okstr);
return $okstr;
}
//三字节的URL编码转成的utf8字符转为unicode编码
function url_utf2u($c)
{
$utfc = "";
$cs = split("%",$c);
for($i=0;$i


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载