湘里妹子学术网

 找回密码
 注册
查看: 2402|回复: 0

簡繁體轉換的CLASS(有source code)

[复制链接]
发表于 2004-10-3 20:35:54 | 显示全部楼层 |阅读模式
以下進入主題:

這是以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;
?>
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|湘里妹子学术网 ( 粤ICP备2022147245号 )

GMT++8, 2024-5-18 00:27 , Processed in 0.062154 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表