utf8转换:将GB编码转换为utf8的代码来源: 发布时间:星期三, 2008年9月10日 浏览:467次 评论:0
一段将GB编码转换为utf8的代码
gb2utf8.php文件如下: ClassGB2UTF8 { var$gb;//待转换的GB2312字符串 var$utf8;//转换后的UTF8字符串 var$CodeTable;//转换过程中使用的GB2312代码文件数组 var$ErrorMsg;//转换过程之中的错误讯息 functionGB2UTF8($InStr="") { $this->gb=$InStr; $this->SetGb2312(); ($this->gb=="")?0:$this->Convert(); } functionSetGb2312($InStr="gb2312.txt") {//设置gb2312代码文件,默认为gb2312.txt $this->ErrorMsg=""; $tmp=@file($InStr); if(!$tmp){ $this->ErrorMsg="NoGB2312"; returnfalse; } $this->CodeTable=array(); while(list($key,$value)=each($tmp)){ $this->CodeTable[hexdec(substr($value,0,6))]=substr($value,7,6); } } functionConvert() {//转换GB2312字符串到UTF8字符串,需预先设置$gb $this->utf8=""; if(!trim($this->gb)||$this->ErrorMsg!=""){ return($this->utf8=$this->ErrorMsg); } $str=$this->gb; while($str){ if(ord(substr($str,0,1))>127) { $tmp=substr($str,0,2); $str=substr($str,2,strlen($str)); $tmp=$this->U2UTF8(hexdec($this->CodeTable[hexdec(bin2hex($tmp))-0x8080])); for($i=0;$i<strlen($tmp);$i+=3) $this->utf8.=chr(substr($tmp,$i,3)); } else { $tmp=substr($str,0,1); $str=substr($str,1,strlen($str)); $this->utf8.=$tmp; } } return$this->utf8; } functionU2UTF8($InStr) { for($i=0;$i<count($InStr);$i++) $str=""; if($InStr<0x80){ $str.=ord($InStr); } elseif($InStr<0x800){ $str.=(0xC0|$InStr>>6); $str.=(0x80|$InStr&0x3F); } elseif($InStr<0x10000){ $str.=(0xE0|$InStr>>12); $str.=(0x80|$InStr>>6&0x3F); $str.=(0x80|$InStr&0x3F); } elseif($InStr<0x200000){ $str.=(0xF0|$InStr>>18); $str.=(0x80|$InStr>>12&0x3F); $str.=(0x80|$InStr>>6&0x3F); $str.=(0x80|$InStr&0x3F); } return$str; } } 测试文件如下: php Header("Content-type:image/png"); $im=imagecreate(400,300); $black=ImageColorAllocate($im,0,0,0); $white=ImageColorAllocate($im,184,44,6); include("gb2utf8.php"); $obj=newgb2utf8(); $obj->gb="123abc中国456def测试正确"; $obj->Convert(); ImageTTFText($im,20,0,5,50,$white,"SIMKAI.TTF",$obj->utf8); ImagePNG($im); ImageDestroy($im); 说明: 需要正确设置font文件,请先确认可以使用font直接(不使用gb2utf8)输出英文 0
相关文章读者评论发表评论 |