在GD中输出汉字的函数的改进
感谢sadly为我们写出了在GD中输出汉字的函数,
我在使用中发现此版本输出的字符串必须为纯中文,不能夹杂英文。
随修改了此bug,与大家分享。。。
<?php //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:windowsfontssimsun.ttf"; //include("gb2utf8.php"); $str = gb2utf8("中国agun阿棍"); ImageTTFText($im, 30, 0, 50, 50, $clr, $fnt, $str); ImageGif($im); ImageDestroy($im);
文章网址:http://www.phprm.com/develop/0e3edd81b07671e7ae924f6315f9d5ec.html
随意转载^^但请附上教程地址。