用PHP实现将GB编码转换为UTF8


Posted in PHP onNovember 25, 2006

gb2utf8.php 文件如下:

<?php 
Class GB2UTF8  
{  
var $gb; // 待转换的GB2312字符串  
var $utf8; // 转换后的UTF8字符串  
var $CodeTable; // 转换过程中使用的GB2312代码文件数组  
var $ErrorMsg; // 转换过程之中的错误讯息  function GB2UTF8($InStr="")  
{  
$this->gb=$InStr;  
$this->SetGb2312();  
($this->gb=="")?0:$this->Convert();  
}  
function SetGb2312($InStr="gb2312.txt")  
{ // 设置gb2312代码文件,默认为gb2312.txt  
$this->ErrorMsg="";  
$tmp=@file($InStr);  
 if (!$tmp) {  
 $this->ErrorMsg="No GB2312";  
 return false;  
 }  
$this->CodeTable=array();  
while(list($key,$value)=each($tmp)) {  
$this->CodeTable[hexdec(substr($value,0,6))]=substr($value,7,6);  
}  
}  
function Convert()  
{ // 转换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;  
}  
function U2UTF8($InStr)  
{  
for($i=0;$i<count($InStr);$i++)  
$str="";  
if ($InStr < 0x80) {  
$str.=ord($InStr);  
}  
else if ($InStr < 0x800) {  
$str.=(0xC0 | $InStr>>6);  
$str.=(0x80 | $InStr & 0x3F);  
}  
else if ($InStr < 0x10000) {  
$str.=(0xE0 | $InStr>>12);  
$str.=(0x80 | $InStr>>6 & 0x3F);  
$str.=(0x80 | $InStr & 0x3F);  
}  
else if ($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=new gb2utf8();  
$obj->gb="123abc中国456def测试正确";  
$obj->Convert();  
ImageTTFText($im, 20, 0, 5, 50, $white, "SIMKAI.TTF", $obj->utf8);  
ImagePNG($im);  
ImageDestroy($im); 
?>

说明: 
需要正确设置font文件,请先确认可以使用font直接(不使用gb2utf8)输出英文。 
PHP 相关文章推荐
phpfans留言版用到的数据操作类和分页类
Jan 04 PHP
查找mysql字段中固定字符串并替换的几个方法
Sep 23 PHP
作为PHP程序员应该了解MongoDB的五件事
Jun 03 PHP
Linux Apache PHP Oracle 安装配置(具体操作步骤)
Jun 17 PHP
网页上facebook分享功能具体实现
Jan 26 PHP
PHP生成自定义长度随机字符串的函数分享
May 04 PHP
PHP缓存机制Output Control详解
Jul 14 PHP
使用PHPMailer实现邮件发送代码分享
Oct 23 PHP
PHP判断字符串长度的两种方法很实用
Sep 22 PHP
laravel学习笔记之模型事件的几种用法示例
Aug 15 PHP
php+redis消息队列实现抢购功能
Feb 08 PHP
thinkphp5.1框架模板赋值与变量输出示例
May 25 PHP
目录,文件操作详谈―PHP
Nov 25 #PHP
几个学习PHP的网址
Nov 25 #PHP
php获得文件扩展名三法
Nov 25 #PHP
用PHP查询域名状态whois的类
Nov 25 #PHP
生成静态页面的PHP类
Nov 25 #PHP
PHP静态类
Nov 25 #PHP
PHP文本操作类
Nov 25 #PHP
You might like
javascript,php获取函数参数对象的代码
2011/02/03 PHP
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
2011/05/18 PHP
PHP执行批量mysql语句的解决方法
2013/05/02 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
2014/06/26 PHP
PHP抓取网页、解析HTML常用的方法总结
2015/07/01 PHP
PHP的APC模块实现上传进度条
2015/10/27 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
2020/08/06 PHP
PHP实现限制域名访问的实现代码(本地验证)
2020/09/13 PHP
超棒的javascript页面顶部卷动广告效果
2007/12/01 Javascript
利用js实现选项卡的特别效果的实例
2013/03/03 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
jQuery实现炫酷的鼠标轨迹特效
2015/02/01 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
使用Bootstrap美化按钮实例代码(demo)
2017/02/03 Javascript
微信小程序 参数传递实例代码
2017/03/20 Javascript
关于vue.js v-bind 的一些理解和思考
2017/06/06 Javascript
IScroll那些事_当内容不足时下拉刷新的解决方法
2017/07/18 Javascript
input输入框内容实时监测(附代码)
2017/08/15 Javascript
对vue.js中this.$emit的深入理解
2018/02/23 Javascript
electron + vue项目实现打印小票功能及实现代码
2018/11/25 Javascript
从理论角度讨论JavaScript闭包
2019/04/03 Javascript
利用Bootstrap Multiselect实现下拉框多选功能
2019/04/08 Javascript
微信小程序云开发之新手环境配置
2019/05/16 Javascript
p5.js实现故宫橘猫赏秋图动画
2019/10/23 Javascript
[06:49]2018DOTA2国际邀请赛寻真——VirtusPro傲视群雄
2018/08/12 DOTA
Python通过socketserver处理多个链接
2020/03/18 Python
聊聊python中的异常嵌套
2020/09/01 Python
html5弹跳球示例代码
2013/07/23 HTML / CSS
Html5实现二维码扫描并解析
2016/01/20 HTML / CSS
你的自行车健身专家:FaFit24
2016/11/16 全球购物
Oracle性能调优原则
2012/05/03 面试题
小学先进集体事迹材料
2014/05/31 职场文书
会计系毕业求职信
2014/08/07 职场文书
小学生优秀作文范文(六篇)
2019/07/10 职场文书
解决numpy和torch数据类型转化的问题
2021/05/23 Python