You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:40:28