用javascript
不过反向utf8->gb2312就不行了

解决方案 »

  1.   

    <?php
    $v = new convert;
    echo 'test'.$v->UTF2gb('转换了');class convert {
        //gb2312和utf-8对应的编码文件
        var $filename = "gb2312.txt";           
        var $codetable = array();             //码表读取后存入这个数组
        //构造函数
        function convert() {
            $tmp = file($this->filename);
            while( list($key,$value) = each($tmp) )
                $this->codetable[hexdec(substr($value,0,6))] = substr($value,7,6);
        }
        
        //GB->UTF-8
        function toUTF8($gb) {
            //转换过程可参考上面列出的文章,这里就不贴了
            return $utf8;        
        }

    function UTF2gb($str) {
            if( !trim($str) )
                return $str;
            $reverse = array();
            while( list($key,$value) = each($this->codetable) )
                $reverse[hexdec($value)] = $key;
            $gb = "";
            while($str) {
                if ( ord(substr($str,0,1))>0xE0  )
                {
                    $tmp = substr($str,0,3);
                    $str = substr($str,3,strlen($str));
                    $utf = hexdec(bin2hex($tmp));
                    $unicode = (($utf & 0x0F0000)>>4) | (($utf & 0x3F00)>>2)
                         | ($utf & 0x3F) ;
                    $gb = $gb .  pack("n",($reverse[$unicode])|0x8080 );
                }
                else
                {
                    $gb = $gb . substr($str,0,1);
                    $str = substr($str,1,strlen($str));                
                }
            }
            return $gb;        
        }
    }  
    ?>
      

  2.   

    php有很多扩展,比如iconv和mbstring就是做这个滴
    嗯,当然也可以是使用php来实现,不过效率比较低,还是使用扩展比较好,速度快,而且还稳定,不过iconv0.9有bug,个人推荐使用mbstring就OK了
      

  3.   

    mb_convert_encoding
    (PHP 4 >= 4.0.6, PHP 5)
    mb_convert_encoding -- Convert character encoding$str = mb_convert_encoding($str, "UTF-8","GB2312");
      

  4.   

    fun_gb2utf8.php:
    <?
    //不用iconv库的gb2312与utf-8的互换函数//对照表的使用
    function get_charset(){
    $filename = "fun_gb2utf8.txt";
    $fp = fopen($filename,"r");
    while(! feof($fp)) {
    list($gb,$utf8) = fgetcsv($fp,10);
    $charset[$gb] = $utf8;
    }
    fclose($fp);
    return $charset;
    }//以上读取对照表到数组备用
    /** 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]);
    }/*
    //调用示例
    $gb2utf_charset=get_charset();
    $strhan = "测试汉字GB转换为UTF8,测试汉字UTF8转换为GB。";
    echo " strhan(".strlen($strhan).")=".$strhan." <br/>\n";
    $strhan_ut=gb2utf8($strhan, $gb2utf_charset);
    echo " strhan(".strlen($strhan_ut).")=".$strhan_ut." <br/>\n";
    $strhan_gb=utf82gb($strhan_ut_i, $gb2utf_charset);
    echo " strhan(".strlen($strhan_gb).")=".$strhan_gb." <br/>\n";
    */?>这个文件: fun_gb2utf8.txt 好象网上没有,你要的加我Q我发给你。56079024