用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 相关文章推荐
PHP简单系统查询模块代码打包下载
Jun 07 PHP
MySql中正则表达式的使用方法描述
Jul 30 PHP
PHP使用数组实现队列
Feb 05 PHP
apache配置虚拟主机的方法详解
Jun 17 PHP
php jsonp单引号转义
Nov 23 PHP
php函数实现判断是否移动端访问
Mar 03 PHP
PHP中preg_match函数正则匹配的字符串长度问题
May 27 PHP
php中动态变量用法实例
Jun 10 PHP
PHP上传Excel文件导入数据到MySQL数据库示例
Oct 25 PHP
Laravel框架搜索分页功能示例
Feb 01 PHP
php解压缩zip和rar压缩包文件的方法
Jul 10 PHP
PHP7 新增常量
Mar 09 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
在线短消息收发的程序,不用数据库
2006/10/09 PHP
PHP nl2br函数 将换行字符转成 &amp;lt;br&amp;gt;
2009/08/21 PHP
从手册去理解分析PHP session机制
2011/07/17 PHP
php图片加水印原理(超简单的实例代码)
2013/01/18 PHP
如何使用PHP批量去除文件UTF8 BOM信息
2013/08/05 PHP
Javascript 判断 object 的特定类转载
2007/02/01 Javascript
JQuery中getJSON的使用方法
2010/12/13 Javascript
javascript的字符串按引用复制和传递,按值来比较介绍与应用
2012/12/28 Javascript
JQUERY 实现窗口滚动搜索框停靠效果(类似滚动停靠)
2013/03/27 Javascript
使用javascript实现页面定时跳转总结篇
2013/09/21 Javascript
Extjs实现进度条的两种便捷方式
2013/09/26 Javascript
appendChild() 或 insertBefore()使用与区别介绍
2013/10/11 Javascript
javascript工厂方式定义对象
2014/12/26 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
2015/03/13 Javascript
jquery判断单选按钮radio是否选中的方法
2015/05/05 Javascript
JQuery异步提交表单与文件上传功能示例
2017/01/12 Javascript
JavaScript利用fetch实现异步请求的方法实例
2017/07/26 Javascript
微信小程序 同步请求授权的详解
2017/08/04 Javascript
快速理解 JavaScript 中的 LHS 和 RHS 查询的用法
2017/08/24 Javascript
Node.js 的 GC 机制详解
2019/06/03 Javascript
Layer.js实现表格溢出内容省略号显示,悬停显示全部的方法
2019/09/16 Javascript
jQuery实现王者荣耀手风琴效果
2020/01/17 jQuery
jQuery实现简单飞机大战
2020/07/05 jQuery
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
[02:20]DOTA2亚洲邀请赛 EHOME战队出场宣传片
2015/02/07 DOTA
python封装对象实现时间效果
2020/04/23 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
2016/12/15 Python
python实现自主查询实时天气
2018/06/22 Python
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
解决Python plt.savefig 保存图片时一片空白的问题
2019/01/10 Python
深入了解Django中间件及其方法
2019/07/26 Python
使用Python的networkx绘制精美网络图教程
2019/11/21 Python
信息工作经验交流材料
2014/05/28 职场文书
政府班子四风问题整改措施
2014/10/04 职场文书
2014年帮扶工作总结
2014/11/26 职场文书
新闻稿标题
2015/07/18 职场文书