zoukankan      html  css  js  c++  java
  • PHP实现---汉字简体繁体转换

    這是以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; 


    /

  • 相关阅读:
    bzoj 1914: [Usaco2010 OPen]Triangle Counting 数三角形【叉积+极角排序+瞎搞】
    poj 1286 Necklace of Beads【polya定理+burnside引理】
    poj 2154 Color【polya定理+欧拉函数】
    poj 2409 Let it Bead【polya定理+burnside引理】
    bzoj 3534: [Sdoi2014]重建【矩阵树定理】
    bzoj 1774: [Usaco2009 Dec]Toll 过路费【排序+Floyd】
    bzoj 4596: [Shoi2016]黑暗前的幻想乡【容斥原理+矩阵树定理】
    bzoj 4031: [HEOI2015]小Z的房间【矩阵树定理】
    poj Find a multiple【鸽巢原理】
    bzoj Strange Way to Express Integers【excrt】
  • 原文地址:https://www.cnblogs.com/wenxinphp/p/5717640.html
Copyright © 2011-2022 走看看