免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1166 | 回复: 0
打印 上一主题 下一主题

一段将GB编码转换为utf8的代码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-07-18 12:21 |只看该作者 |倒序浏览
一段将GB编码转换为utf8的代码
gb2utf8.php 文件如下:
     
[color="#007700"]Class GB2UTF8
{
var [color="#0000bb"]$gb[color="#007700"];          // 待转换的GB2312字符串
[color="#007700"]var [color="#0000bb"]$utf8[color="#007700"];        // 转换后的UTF8字符串
    [color="#007700"]var [color="#0000bb"]$CodeTable[color="#007700"];   // 转换过程中使用的GB2312代码文件数组
    [color="#007700"]var [color="#0000bb"]$ErrorMsg[color="#007700"];    // 转换过程之中的错误讯息
[color="#007700"]function [color="#0000bb"]GB2UTF8[color="#007700"]([color="#0000bb"]$InStr[color="#007700"]=[color="#dd0000"]"")
{
[color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]gb[color="#007700"]=[color="#0000bb"]$InStr;
[color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]SetGb2312();
([color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]gb[color="#007700"]==[color="#dd0000"]""[color="#007700"])?[color="#0000bb"]0[color="#007700"]:[color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]Convert();
}
function [color="#0000bb"]SetGb2312[color="#007700"]([color="#0000bb"]$InStr[color="#007700"]=[color="#dd0000"]"gb2312.txt")
{                  // 设置gb2312代码文件,默认为gb2312.txt
[color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]ErrorMsg[color="#007700"]=[color="#dd0000"]"";
[color="#0000bb"]$tmp[color="#007700"]=@[color="#0000bb"]file[color="#007700"]([color="#0000bb"]$InStr);
        if (![color="#0000bb"]$tmp) {
            [color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]ErrorMsg[color="#007700"]=[color="#dd0000"]"No GB2312";
            return [color="#0000bb"]false;
            }
[color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]CodeTable=array();
while(list([color="#0000bb"]$key[color="#007700"],[color="#0000bb"]$value[color="#007700"])=[color="#0000bb"]each[color="#007700"]([color="#0000bb"]$tmp)) {
[color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]CodeTable[color="#007700"][[color="#0000bb"]hexdec[color="#007700"]([color="#0000bb"]substr[color="#007700"]([color="#0000bb"]$value[color="#007700"],[color="#0000bb"]0[color="#007700"],[color="#0000bb"]6[color="#007700"]))]=[color="#0000bb"]substr[color="#007700"]([color="#0000bb"]$value[color="#007700"],[color="#0000bb"]7[color="#007700"],[color="#0000bb"]6);
}
}
  
function [color="#0000bb"]Convert()
{                   // 转换GB2312字符串到UTF8字符串,需预先设置$gb
[color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]utf8[color="#007700"]=[color="#dd0000"]"";
if(![color="#0000bb"]trim[color="#007700"]([color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]gb[color="#007700"]) || [color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]ErrorMsg[color="#007700"]!=[color="#dd0000"]"") {
return ([color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]utf8[color="#007700"]=[color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]ErrorMsg);
}
        [color="#0000bb"]$str[color="#007700"]=[color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]gb;
while([color="#0000bb"]$str) {
if ([color="#0000bb"]ord[color="#007700"]([color="#0000bb"]substr[color="#007700"]([color="#0000bb"]$str[color="#007700"],[color="#0000bb"]0[color="#007700"],[color="#0000bb"]1[color="#007700"]))>[color="#0000bb"]127)
{
[color="#0000bb"]$tmp[color="#007700"]=[color="#0000bb"]substr[color="#007700"]([color="#0000bb"]$str[color="#007700"],[color="#0000bb"]0[color="#007700"],[color="#0000bb"]2);
[color="#0000bb"]$str[color="#007700"]=[color="#0000bb"]substr[color="#007700"]([color="#0000bb"]$str[color="#007700"],[color="#0000bb"]2[color="#007700"],[color="#0000bb"]strlen[color="#007700"]([color="#0000bb"]$str));
[color="#0000bb"]$tmp[color="#007700"]=[color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]U2UTF8[color="#007700"]([color="#0000bb"]hexdec[color="#007700"]([color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]CodeTable[color="#007700"][[color="#0000bb"]hexdec[color="#007700"]([color="#0000bb"]bin2hex[color="#007700"]([color="#0000bb"]$tmp[color="#007700"]))-[color="#0000bb"]0x8080]));
for([color="#0000bb"]$i[color="#007700"]=[color="#0000bb"]0[color="#007700"];[color="#0000bb"]$i[color="#007700"])
[color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]utf8[color="#007700"].=[color="#0000bb"]chr[color="#007700"]([color="#0000bb"]substr[color="#007700"]([color="#0000bb"]$tmp[color="#007700"],[color="#0000bb"]$i[color="#007700"],[color="#0000bb"]3));
}
else
{
[color="#0000bb"]$tmp[color="#007700"]=[color="#0000bb"]substr[color="#007700"]([color="#0000bb"]$str[color="#007700"],[color="#0000bb"]0[color="#007700"],[color="#0000bb"]1);
[color="#0000bb"]$str[color="#007700"]=[color="#0000bb"]substr[color="#007700"]([color="#0000bb"]$str[color="#007700"],[color="#0000bb"]1[color="#007700"],[color="#0000bb"]strlen[color="#007700"]([color="#0000bb"]$str));
[color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]utf8[color="#007700"].=[color="#0000bb"]$tmp;
}
}
return [color="#0000bb"]$this[color="#007700"]->[color="#0000bb"]utf8;
}
function [color="#0000bb"]U2UTF8[color="#007700"]([color="#0000bb"]$InStr)
{
for([color="#0000bb"]$i[color="#007700"]=[color="#0000bb"]0[color="#007700"];[color="#0000bb"]$i[color="#007700"]++)
[color="#0000bb"]$str[color="#007700"]=[color="#dd0000"]"";
if ([color="#0000bb"]$InStr [color="#007700"]) {
[color="#0000bb"]$str[color="#007700"].=[color="#0000bb"]ord[color="#007700"]([color="#0000bb"]$InStr);
}
else if ([color="#0000bb"]$InStr [color="#007700"]) {
[color="#0000bb"]$str[color="#007700"].=([color="#0000bb"]0xC0 [color="#007700"]| [color="#0000bb"]$InStr[color="#007700"]>>[color="#0000bb"]6);
[color="#0000bb"]$str[color="#007700"].=([color="#0000bb"]0x80 [color="#007700"]| [color="#0000bb"]$InStr [color="#007700"]& [color="#0000bb"]0x3F);
}
else if ([color="#0000bb"]$InStr [color="#007700"]) {
[color="#0000bb"]$str[color="#007700"].=([color="#0000bb"]0xE0 [color="#007700"]| [color="#0000bb"]$InStr[color="#007700"]>>[color="#0000bb"]12);
[color="#0000bb"]$str[color="#007700"].=([color="#0000bb"]0x80 [color="#007700"]| [color="#0000bb"]$InStr[color="#007700"]>>[color="#0000bb"]6 [color="#007700"]& [color="#0000bb"]0x3F);
[color="#0000bb"]$str[color="#007700"].=([color="#0000bb"]0x80 [color="#007700"]| [color="#0000bb"]$InStr [color="#007700"]& [color="#0000bb"]0x3F);
}
else if ([color="#0000bb"]$InStr [color="#007700"]) {
[color="#0000bb"]$str[color="#007700"].=([color="#0000bb"]0xF0 [color="#007700"]| [color="#0000bb"]$InStr[color="#007700"]>>[color="#0000bb"]18);
[color="#0000bb"]$str[color="#007700"].=([color="#0000bb"]0x80 [color="#007700"]| [color="#0000bb"]$InStr[color="#007700"]>>[color="#0000bb"]12 [color="#007700"]& [color="#0000bb"]0x3F);
[color="#0000bb"]$str[color="#007700"].=([color="#0000bb"]0x80 [color="#007700"]| [color="#0000bb"]$InStr[color="#007700"]>>[color="#0000bb"]6 [color="#007700"]& [color="#0000bb"]0x3F);
[color="#0000bb"]$str[color="#007700"].=([color="#0000bb"]0x80 [color="#007700"]| [color="#0000bb"]$InStr [color="#007700"]& [color="#0000bb"]0x3F);
}
return [color="#0000bb"]$str;
}
}

测试文件如下:
php
Header[color="#007700"]([color="#dd0000"]"Content-type: image/png");
[color="#0000bb"]$im [color="#007700"]= [color="#0000bb"]imagecreate[color="#007700"]([color="#0000bb"]400[color="#007700"],[color="#0000bb"]300);
[color="#0000bb"]$black [color="#007700"]= [color="#0000bb"]ImageColorAllocate[color="#007700"]([color="#0000bb"]$im[color="#007700"], [color="#0000bb"]0[color="#007700"],[color="#0000bb"]0[color="#007700"],[color="#0000bb"]0);
[color="#0000bb"]$white [color="#007700"]= [color="#0000bb"]ImageColorAllocate[color="#007700"]([color="#0000bb"]$im[color="#007700"], [color="#0000bb"]184[color="#007700"],[color="#0000bb"]44[color="#007700"],[color="#0000bb"]6);
include([color="#dd0000"]"gb2utf8.php");
[color="#0000bb"]$obj[color="#007700"]=new [color="#0000bb"]gb2utf8();
[color="#0000bb"]$obj[color="#007700"]->[color="#0000bb"]gb[color="#007700"]=[color="#dd0000"]"123abc中国456def测试正确";
[color="#0000bb"]$obj[color="#007700"]->[color="#0000bb"]Convert();
[color="#0000bb"]ImageTTFText[color="#007700"]([color="#0000bb"]$im[color="#007700"], [color="#0000bb"]20[color="#007700"], [color="#0000bb"]0[color="#007700"], [color="#0000bb"]5[color="#007700"], [color="#0000bb"]50[color="#007700"], [color="#0000bb"]$white[color="#007700"], [color="#dd0000"]"SIMKAI.TTF"[color="#007700"], [color="#0000bb"]$obj[color="#007700"]->[color="#0000bb"]utf8);
[color="#0000bb"]ImagePNG[color="#007700"]([color="#0000bb"]$im);
[color="#0000bb"]ImageDestroy[color="#007700"]([color="#0000bb"]$im[color="#007700"]);

说明:
需要正确设置font文件,请先确认可以使用font直接(不使用gb2utf8)输出英文。
gb2312.txt请在网上查找

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/7748/showart_36281.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP