一、原因
1.编码原因。在用GD库输出中文字符串时,要使用imagettftext()函数。但如果PHP编译时启用–enable-gd-jis-conv选项的话,那么非ASCII字符(例如汉字、拼音、希腊文和箭头) 会被当成EUC-JP编码 (phpinfo中美其名曰“支持JIS编码的字体”), 从而导致乱码(由于西文字体没有假名或汉字,一般表现为全部是方框)。
2.没有选择正确的TTF字体文件。使用gd库时如果要输出中文字符,需要选择正确的TTF字体文件。
二、解决方法
1.建议整站使用UTF8编码,如果你已使用的是GB2312或GBK编码,请使用iconv或自定义的gb2312与utf8转换函数进行字符编码转换。
2.如果你是刚进行php环境搭建,建议将Apache配置文件中的默认字符集修改为UTF8,即AddDefaultCharset UTF8。
3.如果上述方法还不行,请检查你在编译gd库时是否添加了“–enable-gd-jis-conv”选项,此选项是为了让gd库支持日文编码的字库,请取消此选项并重新编译。此方法本人已验证过,Linux系统下安装配置nginx+php环境,搭建Zabbix服务时碰到,添加了“–enable-gd-jis-conv”选项,Zabbix使用中文界面,更换字体文件前后,查看主机监控图标信息都会出现乱码。
4.使用php gd库产生中文乱码的另一个原因是没有选择正确的TTF字体,你需要选择支持中文的字体,常用的中文字体文件是simsun.ttc和simhei.ttf。
按照上述方法,基本上使用php gd库产生中文乱码时都能够解决。只要仔细排查其实gd库的中文乱码解决起来非常方便。
参考:
https://www.php.cn/php-ask-456070.html
https://blog.csdn.net/lizhenjian521/article/details/51038547