一个朋友问我怎样用php和gd输出带中文字符的图片,我当然是叫他先到网上搜索一番的,结果,他说都只找到一个用码表进行转换(gb2unicode?)的方法,问我有没有更好的,更快一点的方法。
那当然是有的,而且要快多了,也容易多了,那就是iconv,当然,这要求你有管理员的权限,在安装了libiconv之后,在把php用--with-iconv参数配置编译,或者生成独立的扩展模块,都行,以后,就可以直接用iconv函数来转化了。像下面这样子:
<?php
header("content-type:image/gif");
$pic=imagecreate(500,400);
$black=imagecolorallocate($pic,150,150,150);
$color=imagecolorallocate($pic,5,5,5);
$font1="/home/share/font/simli.ttf";
$font2="/home/share/font/simhei.ttf";
$font3="/home/share/font/simsun.ttf";
$font4="/home/share/font/simyou.ttf";
$str1=iconv("gb2312","UTF-8","离离原上草,一岁一枯荣。");
$str2=iconv("gb2312","UTF-8","野火烧不尽,春风吹又生。");
$str3=iconv("gb2312","UTF-8","远芳侵古道,青翠接荒城。");
$str4=iconv("gb2312","UTF-8","又送王孙去,萋萋满别情。");
//imagettftext($pic,16,0,155,365,$color,$font1,$str1);
//imagettftext($pic,16,0,155,405,$color,$font2,$str2);
//imagettftext($pic,16,0,155,445,$color,$font3,$str3);
//imagettftext($pic,16,0,155,485,$color,$font4,$str4);
imagegif($pic);
imagedestroy($pic);
?>
主要有效的语句是$str=iconv("gb2312","UTF-8","中文字符串");
看看,多简单啊!当然,在没有安装libiconv以及php扩展的时候,用转换码表是唯一的选择了。这里写出来,给大家多一个参考吧。
另外,我用的libiconv是1.7版的,从gb2312到utf-8很正常,但是到big5就不正常了,当然我不用繁体,这也没什么大不了的。