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

把GB码转换到UTF8,php中TTF支持UTF8编码的非ASCII字符输出.在分析这段代码之后,发现可以实现中文与ASCII混合输出图象,这样在我们操作图象函数时可以更方便.
代码如下: ? 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); $utf8=;
while($gb) { if (ord(substr($gb,0,1))127) { $this=substr($gb,0,2);
$gb=substr($gb,2,strlen($gb)-2);
$utf8.=u2utf8(hexdec($codetable[hexdec(bin2hex($this))-0x8080])); }
else { $this=substr($gb,0,1); $gb=substr($gb,1,strlen($gb)-1);
$utf8.=u2utf8($this); } } /*$ret=; for($i=0;$istrlen($utf8);$i+=3)
$ret.=chr(substr($utf8,$i,3)); return $ret;*/ return $utf8; } function
u2utf8($c) { /*for($i=0;$icount($c);$i++)*/ $str=; if ($c 0x80) {
$str.=$c; } else if ($c 0x800) { $str.=chr(0xC0 | $c6); $str.=chr(0x80 |
$c & 0x3F); } else if ($c 0x10000) { $str.=chr(0xE0 | $c12);
$str.=chr(0x80 | $c6 & 0x3F); $str.=chr(0x80 | $c & 0x3F); } else if ($c
0x200000) { $str.=chr(0xF0 | $c18); $str.=chr(0x80 | $c12 & 0x3F);
$str.=chr(0x80 | $c6 & 0x3F); $str.=chr(0x80 | $c & 0x3F); } return
$str; } ? ——————————————– ? Header
(Content-type: image/jpeg); $im = imagecreate (800, 400); $black =
ImageColorAllocate ($im, 0, 0, 0); $white = ImageColorAllocate ($im,
255, 255, 255); include(gb2utf8.php); $str=gb2utf8(aaa中过32434);
ImageTTFText ($im, 90, 10, 110, 300, $white,
/usr/share/fonts/default/TrueType/simsun.ttc, $str); ImageJPEG ($im);
ImageDestroy ($im); ?

感谢sadly为我们写出了在GD中输出汉字的函数,
我在使用中发现此版本输出的字符串必须为纯中文,不能夹杂英文。
随修改了此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);
澳门新葡亰3522平台游戏,$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:windowsfontssimsun.ttf”;
//include(“gb2utf8.php”);
$str = gb2utf8(“中国agun阿棍”);
ImageTTFText($im, 30, 0, 50,50, $clr, $fnt, $str);
ImageGif($im);
ImageDestroy($im);
?>