在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
随意转载^^但请附上教程地址。