为了加强两岸关系,特发此类.
[php]
<?php
//=====================================================
// author:lyxcf
//QQ:46429691
// function Big5_Gb($str) => big5=>GB
for string
// function Gb_Big5($str) => GB=>Big5 for string
//=====================================================
class CCharset {
//码表
var $gb_map="BIG2GB.Table";
var $big5_map="GB2BIG.Table";
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;
}
}
?>
[/php]
演示:
(简)
http://www.sxcafe.com/5931.lyxcf
(繁)
http://www.sxcafe.com/5931.shtml