UTF-8 转gb遇到?就不转换了下面的下载包里的函数可以实现UTF-8 GB Big5之间的转换.但是UTF-8 转gb,时不行,,遇到 ? . 的符号号就停止,后面的就不转换了,希望高手优化一下鐗堟瑠鎵€鏈?寤鸿鎮ㄤ互 IE 5.0 800 X 600 浠ヤ笂楂樺僵妯″紡鐎忚鏈珯http://download.csdn.net/detail/webkkff633/4348668

解决方案 »

  1.   

    <?php 
    /******************************
    //UTF-8 转GB编码
    *******************************/
    function utf82gb($utfstr)
    {
    if(function_exists('iconv')){ return iconv('utf-8','gbk',$utfstr); }
    global $UC2GBTABLE;
    $okstr = "";
    if(trim($utfstr)=="") return $utfstr;
    if(empty($UC2GBTABLE)){
    $filename = dirname(__FILE__)."/date/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);
    }
    $okstr = "";
    $ulen = strlen($utfstr);
    for($i=0;$i<$ulen;$i++)
    {
    $c = $utfstr[$i];
    $cb = decbin(ord($utfstr[$i]));
    if(strlen($cb)==8){ 
    $csize = strpos(decbin(ord($cb)),"0");
    for($j=0;$j < $csize;$j++){
    $i++; $c .= $utfstr[$i];
    }
    $c = utf82u($c);
    if(isset($UC2GBTABLE[$c])){
    $c = dechex($UC2GBTABLE[$c]+0x8080);
    $okstr .= chr(hexdec($c[0].$c[1])).chr(hexdec($c[2].$c[3]));
    }
    else
    { $okstr .= "&#".$c.";";}
    }
    else $okstr .= $c;
    }
    $okstr = trim($okstr);
    return $okstr;
    }
    /*******************************
    //GB转UTF-8编码
    *******************************/
    function gb2utf8($gbstr) {
    if(function_exists('iconv')){ return iconv('gbk','utf-8',$gbstr); }
    global $CODETABLE;
    if(trim($gbstr)=="") return $gbstr;
    if(empty($CODETABLE)){
    $filename = dirname(__FILE__)."/date/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)) > 0x80) {
    $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 < strlen($utf8);$i += 3)
    $ret .= chr(substr($utf8, $i, 3));
    }
    }
    else
    {
    $ret .= substr($gbstr, 0, 1);
    $gbstr = substr($gbstr, 1, strlen($gbstr));
    }
    }
    return $ret;
    }
    //Unicode转utf8
    function u2utf8($c) {
    for ($i = 0;$i < count($c);$i++)
    $str = "";
    if ($c < 0x80) {
    $str .= $c;
    } else if ($c < 0x800) {
    $str .= (0xC0 | $c >> 6);
    $str .= (0x80 | $c & 0x3F);
    } else if ($c < 0x10000) {
    $str .= (0xE0 | $c >> 12);
    $str .= (0x80 | $c >> 6 & 0x3F);
    $str .= (0x80 | $c & 0x3F);
    } else if ($c < 0x200000) {
    $str .= (0xF0 | $c >> 18);
    $str .= (0x80 | $c >> 12 & 0x3F);
    $str .= (0x80 | $c >> 6 & 0x3F);
    $str .= (0x80 | $c & 0x3F);
    }
    return $str;
    }
    //utf8转Unicode
    function utf82u($c)
    {
      switch(strlen($c)) {
        case 1:
          return ord($c);
        case 2:
          $n = (ord($c[0]) & 0x3f) << 6;
          $n += ord($c[1]) & 0x3f;
          return $n;
        case 3:
          $n = (ord($c[0]) & 0x1f) << 12;
          $n += (ord($c[1]) & 0x3f) << 6;
          $n += ord($c[2]) & 0x3f;
          return $n;
        case 4:
          $n = (ord($c[0]) & 0x0f) << 18;
          $n += (ord($c[1]) & 0x3f) << 12;
          $n += (ord($c[2]) & 0x3f) << 6;
          $n += ord($c[3]) & 0x3f;
          return $n;
      }
    }
    /**********************************
    //Big5码转换成GB码
    **********************************/
    function big52gb($Text) {
    if(function_exists('iconv')){ return iconv('big5','gbk',$Text); }
    global $BIG5_DATA;
    if(empty($BIG5_DATA)){
    $filename = dirname(__FILE__)."/date/big5-gb.table";
    $fp = fopen($filename, "rb");
    $BIG5_DATA = fread($fp,filesize($filename));
    fclose($fp);
    }
    $max = strlen($Text)-1;
    for($i=0;$i<$max;$i++) {
    $h = ord($Text[$i]);
    if($h>=0x80) {
    $l = ord($Text[$i+1]);
    if($h==161 && $l==64) {
    $gbstr = " ";
    }else{
    $p = ($h-160)*510+($l-1)*2;
    $gbstr = $BIG5_DATA[$p].$BIG5_DATA[$p+1];
    }
    $Text[$i] = $gbstr[0];
    $Text[$i+1] = $gbstr[1];
    $i++;
    }
    }
    return $Text;
    }
    /********************************
    //GB码转换成Big5码
    *********************************/
    function gb2big5($Text) {
    if(function_exists('iconv')){ return iconv('gbk','big5',$Text); }
    global $GB_DATA;
    if(empty($GB_DATA)){
    $filename = dirname(__FILE__)."/date/gb-big5.table";
    $fp = fopen($filename, "rb");
    $gb = fread($fp,filesize($filename));
    fclose($fp);
    }
    $max = strlen($Text)-1;
    for($i=0;$i<$max;$i++) {
    $h = ord($Text[$i]);
    if($h>=0x80) {
    $l = ord($Text[$i+1]);
    if($h==161 && $l==64) {
    $big = " ";
    }else{
    $p = ($h-160)*510+($l-1)*2;
    $big = $GB_DATA[$p].$GB_DATA[$p+1];
    }
    $Text[$i] = $big[0];
    $Text[$i+1] = $big[1];
    $i++;
    }
    }
    return $Text;
    }
    ?>
      

  2.   

    别开玩笑了,iconv没用过吗。
      

  3.   

    鐗堟瑠鎵€鏈?寤鸿鎮ㄤ互 IE 5.0 800 X 600 浠ヤ笂楂樺僵妯″紡鐎忚鏈珯这个不是UTF-8的内容吧?原文是什么
      

  4.   

    下载包里的软件转码的时候符号不能转,所以还是建议伱手动转码吧!!
    iconv()
      

  5.   


    iconv
    (PHP 4 >= 4.0.5, PHP 5)iconv -- Convert string to requested character encoding
    说明
    string iconv ( string in_charset, string out_charset, string str )
    Performs a character set conversion on the string str from in_charset to out_charset.<?php
    echo iconv("ISO-8859-1", "UTF-8", "This is a test.");
    ?> PHP手册->索引->iconv
      

  6.   

    $result = iconv("UTF-8","GB2312",$content);就可以搞定
      

  7.   

    我在申请了个linux虚拟主机采用CentOs5.2操作系统 的空间试一下,还是不行$str="鐗堟瑠鎵€鏈?寤鸿鎮ㄤ互 IE" ;
    echo iconv("UTF-8","gb2312//TRANSLIT",  $str);
    echo iconv("UTF-8","GB2312//IGNORE",  $str);
    echo iconv("UTF-8","GBK",  $str);显示如下
    版所?建您以 IE
    还要什么  参数,或别的方法
      

  8.   

    echo iconv('utf-8', 'gbk//IGNORE', $str);版權所有建議您以 IE
      

  9.   

    我的显示是
    版權所?建議您以 IElinux虚拟主机采用CentOs5.2操作系统,可能是系统的问题,楼上的是什么操作系统,配置说一下
      

  10.   

    恩恩你这个多多方面试试echo iconv('utf-8', 'gbk//IGNORE', $str);
    这个肯定能行,你是不是在试试?
      

  11.   

    echo iconv('utf-8', 'gbk//IGNORE', $str);版權所有建議您以 IE转成这样还是个繁体,还要其它方法吗
      

  12.   

    然后php代码 header("Content-type: text/html;charset=GBK");
    你也可以网页的编码不该,只改php输出。header("Content-type: text/html;charset=utf8");总之只要两者的编码都相同即可。
    header()放在最开始也行,放在输出的开始处也行。建议是放在代码的开头处。
    就看你的PHP代码是混在网页里,还是单独存在的.
      

  13.   

    mb_convert_encoding($str,"UTF-8","UTF-8,GBK,BIG5");
      

  14.   

    繁简转换这步无法应该无法通过iconv或mb完成