首页 > php代码 > 不用iconv函数实现UTF-8编码转换GB2312的PHP函数

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

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


这个函数如下:

<?php
/*******************************
//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 < strlen($utf8);$i = 3)
                $ret .= chr(substr($utf8, $i, 3));
            }
        }
        else
        {
            $ret .= substr($gbstr, 0, 1);
            $gbstr = substr($gbstr, 1, strlen($gbstr));
        }
    }
    return $ret;
}
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; 
}


本文链接:http://www.phprm.com/code/b471c5b1252d1c00794f13df5e460d2d.html

收藏随意^^请保留教程地址.

标签:none

发表留言