
这是以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
}
/
echo mb_convert_encoding("你是我的朋友", "GB2312", "big5")mb_convert_encoding 函数为php内部多字节字符串编码转换函数,可以在有需要的使用场合(如:解决在GB2312编码环境下使用Ajax产生的中文字乱码的问题)方便进行编码转换,以解决网页乱码的问题,使用非常方便,效率非常高,几乎支持所有编码
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)