爱易网页
PHP教程
簡繁体转换的class
日期:2012-12-27 浏览次数:20500 次
這是以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 ) {
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。