在GD中输出汉字的函数的改进

来源(久久网络-网络学堂-网络编程)

From: http://www.99net.net/study/prog/67165414.htm

在GD中输出汉字的函数的改进

--------------------------------------------------------------------------------
2003-4-10 15:12:18

我在使用中发现此版本输出的字符串必须为纯中文,不能夹杂英文。
随修改了此bug,与大家分享。。。

<?
//Program writen by sadly www.phpx.com
//modified by agun 2000/6/20
function gb2utf8($gb) {

        if(!trim($gb))
                return $gb;

        $filename="gb2312.txt";
        $tmp=file($filename);
        $codetable=array();
        while(list($key,$value)=each($tmp))
        $codetable[hexdec(substr($value,0,6))]=substr($value,7,6);

        $ret="";
        $utf8="";
        while($gb) {
                if (ord(substr($gb,0,1))>127) {
                        $this=substr($gb,0,2);
                        $gb=substr($gb,2,strlen($gb));
                        $utf8=u2utf8(hexdec($codetable[hexdec(bin2hex($this))-0x8080]));
                        for($i=0;$i<strlen($utf8);$i+=3)
                        $ret.=chr(substr($utf8,$i,3));
                } else {
                        $ret.=substr($gb,0,1);
                        $gb=substr($gb,1,strlen($gb));
                }
        }
        return $ret;
}

function u2utf8($c)
{
        for($i=0;$i<count($c);$i++)
                $str="";

        if ($c < 0x80) {
                $str.=$c;
        } else if ($c < 0x800) {
                $str.=(0xC0 | $c>>6);
                $str.=(0x80 | $c & 0x3F);
        } else if ($c < 0x10000) {
                $str.=(0xE0 | $c>>12);
                $str.=(0x80 | $c>>6 & 0x3F);
                $str.=(0x80 | $c & 0x3F);
        } else if ($c < 0x200000) {
                $str.=(0xF0 | $c>>18);
                $str.=(0x80 | $c>>12 & 0x3F);
                $str.=(0x80 | $c>>6 & 0x3F);
                $str.=(0x80 | $c & 0x3F);
        }
        return $str;
}

Header("Content-type: image/gif");
$im = imagecreate(300,150);
$bkg = ImageColorAllocate($im, 0,0,0);
$clr = ImageColorAllocate($im, 255,255,255);
$fnt = "c:\windows\fonts\simsun.ttf";
//include("gb2utf8.php");
$str = gb2utf8("中国agun阿棍");
ImageTTFText($im, 30, 0, 50,50, $clr, $fnt, $str);
ImageGif($im);
ImageDestroy($im);
?>

Link: http://www.asm32.net/article_details.aspx?id=808


浏览次数 487 发布时间 2006-05-03 23:19:33 从属分类 网络编程 【评论】【 】【打印】【关闭
 
| www.asm32.net | 2006版 | 资料中心 | linux | asm/asm32 | C/C++ | VC++ | java | Python | 书签 | ASP.Net书签 | 京ICP备09029108号-1