用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 日期时间函数的高级应用技巧
Oct 10 PHP
php中计算时间差的几种方法
Dec 31 PHP
PHP使用range协议实现输出文件断点续传代码实例
Jul 04 PHP
codeigniter中实现一次性加载多个view的方法
Mar 20 PHP
php正则表达式获取内容所有链接
Jul 24 PHP
php实现点击可刷新验证码
Nov 07 PHP
php等比例缩放图片及剪切图片代码分享
Feb 13 PHP
利用php-cli和任务计划实现刷新token功能的方法
May 03 PHP
PHP将数据导出Excel表中的实例(投机型)
Jul 31 PHP
Yii2框架类自动加载机制实例分析
May 02 PHP
yii2安装详细流程
May 23 PHP
Laravel 实现数据软删除功能
Aug 21 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
PHP开发文件系统实例讲解
2006/10/09 PHP
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
2011/05/04 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
2016/01/05 PHP
php文档工具PHP Documentor安装与使用方法
2016/01/25 PHP
js的with语句使用方法
2007/09/21 Javascript
jquery $.each()使用探讨
2013/09/23 Javascript
JavaScript基础知识及常用方法总结
2016/01/10 Javascript
NodeJS实现阿里大鱼短信通知发送
2016/01/17 NodeJs
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
2017/03/08 Javascript
jQuery插件HighCharts绘制2D半圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
jQuery上传插件webupload使用方法
2017/08/01 jQuery
详解React-Native全球化多语言切换工具库react-native-i18n
2017/11/03 Javascript
Vue添加请求拦截器及vue-resource 拦截器使用
2017/11/23 Javascript
使用async、enterproxy控制并发数量的方法详解
2018/01/02 Javascript
Vue.js实现可配置的登录表单代码详解
2018/03/29 Javascript
Vue2 添加数据可视化支持的方法步骤
2019/01/02 Javascript
js实现鼠标拖拽缩放div实例代码
2019/03/25 Javascript
vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法
2019/04/17 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
2019/09/15 jQuery
6种JavaScript继承方式及优缺点(小结)
2020/02/06 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
[01:18]一目了然!DOTA2DotA快捷操作对比第一弹
2014/07/01 DOTA
[00:59]DOTA2荣耀之路1:Doom is back!weapon X!
2018/05/22 DOTA
python 产生token及token验证的方法
2018/12/26 Python
PyQt5 实现给窗口设置背景图片的方法
2019/06/13 Python
Python替换月份为英文缩写的实现方法
2019/07/15 Python
wxPython绘图模块wxPyPlot实现数据可视化
2019/11/19 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
2019/12/09 Python
Python with标签使用方法解析
2020/01/17 Python
logging level级别介绍
2020/02/21 Python
python的help函数如何使用
2020/06/11 Python
利用纯CSS3实现动态的自行车特效源码
2017/01/20 HTML / CSS
html5生成柱状图(条形图)效果的实例代码
2016/03/25 HTML / CSS
mysql_pconnect()和mysql_connect()有什么区别
2012/05/25 面试题
面向对象编程OOP的优点
2013/01/22 面试题
教师节宣传方案
2014/05/23 职场文书