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; 


/

转载于:https://www.cnblogs.com/wenxinphp/p/5717640.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值