扩充big5_func的Gb互转utf8函数
Author Author: Autoit | Date Date:2006-11-09 | View Count View: 10149 | Digg Count Digg: 59

joomla.org.tw的版本里的 big5_func 里没有 gb <->utf8 的互转, 在没有iconv与 mb_convert的情况下使用起来就很别脚了[gb<->big5<->utf8].

方法:

在includes/下面的 big5_func.default.php 结尾 ?> 前面增加:

/******************************
//UTF-8 转GB编码
*******************************/
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);
    }
    $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) {
    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)) > 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;
}

保存上传. 然后将gb2312-utf8.table也上传到当然目录.

那么在需要的地方就可以直使用 utf82gb() 与gb2utf8()来进行 gb 与utf8之间的转换了.

 

Ps: 以前有写的一个 mod_baidump3search [在当前页面上[utf8编码格式]选中要在baidu mp3里搜索的字后点击当前图片就可以直接在 mp3.baidu.com [gb2312编码格式]里搜索.]里也有用到的一个 utf转gb的函数, 那个是用 JS 来实现的. 如果需要,可以下载参考.


Permanent URL: http://www.autoit.cn/index.php/content/view/84/25.html

Shares: Google书签 Yahoo书签 雅虎收藏夹 365Key网摘 新浪ViVi 百度收藏 天极网摘 diglog 和讯网摘 POCO网摘 YouNote网摘 博拉网 天下图摘 spurl blogmarks BlinkList reddit digg Del.icio.us   |  Tags: utf8  转码