PHP5.6升级至7.4后imagettftext生成图片字符乱码求助
PHP 7.4 下 imagettftext 生成多语言文本乱码解决思路
- 确保字符编码统一:PHP 7.4 对字符串编码的校验更严格,需确认输入文本为
UTF-8编码,同时使用的字体文件要支持目标语言字符(比如测试文本中的土耳其语特殊字符)。可通过mb_detect_encoding()检测文本编码,必要时用mb_convert_encoding()将其转换为UTF-8。 - 传入字体绝对路径:PHP 7.4 可能调整了字体查找逻辑,避免依赖系统默认字体路径,直接传入字体文件的完整绝对路径(如
/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf),确保加载的是支持多语言渲染的字体。 - 验证函数参数编码:
imagettftext要求文本参数必须为UTF-8编码,PHP 5.6可能自动兼容了其他编码格式,7.4则严格执行规则。若你的文本是其他编码(如ISO-8859-9),必须转成UTF-8后再传入函数。 - 检查GD库版本差异:升级PHP时通常会同步升级GD库,不同版本的GD对字体渲染的处理存在差异。可通过
phpinfo()查看当前GD库版本,尝试调整GD库版本,或确认编译GD时已完整支持TrueType字体。 - 编写极简测试脚本排查:剥离业务逻辑,用最小化代码验证问题,定位是编码、字体还是环境配置导致的乱码:
<?php $image = imagecreatetruecolor(400, 100); $white = imagecolorallocate($image, 255, 255, 255); $black = imagecolorallocate($image, 0, 0, 0); imagefill($image, 0, 0, $white); $text = "TEST Çiçek Sok. Çiç"; // 替换为你系统中支持多语言的字体绝对路径 $font = "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"; imagettftext($image, 20, 0, 20, 50, $black, $font, $text); header('Content-Type: image/png'); imagepng($image); imagedestroy($image);

内容的提问来源于stack exchange,提问作者yigit
相关产品推荐
相关产品推荐

