簡繁体转换的class

  •   2009-08-01/08:16
  • 這是以class包裝好的簡繁體轉換的class,
    另外需要兩個table檔:
    1. http://www.jerry.com.tw/php/big5.map
    2. http://www.jerry.com.tw/php/gb.map
    程式如下: CCharset.php3

    <? //=====================================================
    // 程式員: Magic Jerry
    //
    // function Big5_Gb($str) => big5轉GB for string
    // function Gb_Big5($str) => GB轉Big5 for string
    //=====================================================
    class CCharset {

    var $gb_map="gb.map"; //如果要放到別的路徑,要加上完整路徑
    var $big5_map="big5.map"; //例如 ="/home/table/gb.map

    var $dep_char = 127;


    //-----------------------------------------------------------------
    function cbig5_gb($str,$fd) {

    $c=ord(substr($str,0,1));
    $x=ord(substr($str,1,1));
    $address=(($c-160)*510)+($x-1)*2;
    fseek($fd, $address);
    $hi=fgetc($fd);
    $lo=fgetc($fd);
    return "$hi$lo";
    }

    function cgb_big5($str,$fd) {
    $c=ord(substr($str,0,1));
    $x=ord(substr($str,1,1));
    $address=(($c-160)*510)+($x-1)*2;
    fseek($fd, $address);
    $hi=fgetc($fd);
    $lo=fgetc($fd);
    return "$hi$lo";
    }

    //-----------------------------------------------------------------
    function Big5_Gb($str) {
    $fd = fopen ($this->gb_map, "r");
    $str=str_replace("charset=big5","charset=gb2312", $str);
    $outstr="";
    for($i=0;$i<strlen($str);$i++) {
    $ch=ord(substr($str,$i,1));
    if($ch > $this->dep_char) {
    $outstr.=$this->cbig5_gb(substr($str,$i,2),$fd);
    $i++;

    } else {
    $outstr.=substr($str,$i,1);
    }
    }
    fclose ($fd);
    return $outstr;
    }
    //-----------------------------------------------------------------
    function Gb_Big5($str) {
    $fd = fopen ($this->big5_map, "r");
    $str=str_replace("charset=gb2312","charset=big5", $str);
    $outstr="";
    for($i=0;$i<strlen($str);$i++) {
    $ch=ord(substr($str,$i,1));
    if($ch > $this->dep_char) {
    $outstr.=$this->cgb_big5(substr($str,$i,2),$fd);
    $i++;

    } else {
    $outstr.=substr($str,$i,1);
    }
    }
    fclose ($fd);
    return $outstr;

    }

    }
    ?>

    ===================================================================
    使用範例:
    <?
    // Designer: Magic Jerry


    //====直接轉換文字串 的使用方法========
    include("CCharset.php3");
    $obj=new CCharset;
    $big5="這是一個big5的文字串";
    $tgb=$obj->Big5_Gb($big5);
    echo $tgb; //===> $tgb為轉換好的gb碼字串
    $tbig5=$obj->Gb_Big5($tgb);
    echo $tbig5; // 又被轉回來了: big5
    //======================================
    ?>




    <?
    //如果直接轉換網頁 或是檔案
    // 語法 http://your.domain.com.tw/這個程式.php3?http://要轉碼的網頁url或檔案
    // example: 轉換奇摩首頁
    // http://your.domain.com.tw/這個程式.php3?http://www.kimo.com.tw/index.shtml
    // 注意: 以下寫法如遇到該網頁有使用cookie,例如認證user,可能會被踢回,login錯誤..
    // 為什麼? 想想看吧... @_@
    include("CCharset.php3");
    $file=$QUERY_STRING;
    $fcontents = join( '', file( "$file" ) );
    $fcontents=str_replace("<head>","<head><base href=$file>", $fcontents);
    $code=new CCharset;
    $gb=$code->Big5_Gb($fcontents);
    echo $gb;
    ?>



    範例:

    <?

    if($func=="charset") {
    setcookie("CHAR_GB",$GB,time()+ 31536000);
    $t=time();
    $url="http://".$HTTP_HOST.$PHP_SELF."?".$QUERY_STRING;
    $url=str_replace("?func=charset&GB=1","", $url);
    $url=str_replace("?func=charset&GB=0","", $url);
    $url=str_replace("&func=charset&GB=1","", $url);
    $url=str_replace("&func=charset&GB=0","", $url);
    //echo $url;
    //echo "SET to Charset = $CHAR_GB";
    $t=time();
    echo "
    <script language=javascript>
    document.location='$url'
    </script>
    ";

    exit;
    }
    //phpinfo();
    if($CHAR_GB==1 && !$istran ) {
    include("CCharset.php3");
    if(strlen($QUERY_STRING)) $url="http://".$HTTP_HOST.$PHP_SELF."?".$QUERY_STRING."&istran=1";
    else $url="http://".$HTTP_HOST.$PHP_SELF."?istran=1";

    while (list ($key, $val) = each ($HTTP_COOKIE_VARS)) {
    //echo "$key => $val<br>";
    $url.="&".$key."=".urlencode($val);
    }

    $fcontents = join( '', file( "$url" ) );
    $code=new CCharset;
    $fcontents=$code->Big5_Gb($fcontents);
    //echo "轉換過的 $CHAR_GB";
    echo $fcontents;
    exit;

    }
    /

    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多