使用PHP结合Mpdf库生成含乌尔都语文本PDF遇UTF-8处理故障
解决Mpdf处理UTF-8阿拉伯语文字的问题
我之前也碰到过Mpdf处理阿拉伯语这类复杂UTF-8字符的坑,就算照着手册示例来也踩过雷。核心问题大多出在字体不支持复杂脚本和RTL(从右到左)布局未正确配置上,给你几个针对性的解决方案:
1. 加载支持阿拉伯语的字体
Mpdf默认的字体(比如Helvetica)不支持阿拉伯语的连写和特殊字符,必须替换成支持多语言的字体,比如DejaVu Sans(Mpdf内置了这个字体,不用额外下载),或者专门的阿拉伯字体如Amiri。
你可以在初始化Mpdf时直接指定默认字体,或者在HTML的CSS里明确设置字体。
2. 完善Mpdf的字符集与RTL配置
除了allow_charset_conversion,还要明确指定charset为UTF-8,同时开启RTL模式适配阿拉伯语的书写方向。另外一定要确保你的PHP文件本身是UTF-8无BOM编码,避免编码冲突。
修改后的完整代码示例
require_once '../vendor/autoload.php'; // 初始化Mpdf,配置字体、字符集和RTL支持 $mpdf = new \Mpdf\Mpdf([ 'allow_charset_conversion' => true, 'charset' => 'UTF-8', 'default_font' => 'dejavusans', // 使用支持多语言的DejaVu Sans字体 'mode' => 'utf-8', 'orientation' => 'P', 'direction' => 'rtl' // 开启RTL布局,适配阿拉伯语 ]); $html = ' <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" dir="rtl"> <!-- 这里也设置dir="rtl" --> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Document in Arabic</title> <style> body { font-family: dejavusans, sans-serif; /* 确保HTML里的字体和Mpdf配置一致 */ } </style> </head> <body> ... اسلام و علیکم ... لفظوں کا مجموعہ </body> </html>'; $mpdf->WriteHTML($html); $mpdf->Output();
额外排查点
- 如果还是报错,试试关闭
allow_charset_conversion(设为false),有时候自动字符转换反而会干扰原生UTF-8的渲染 - 检查Composer是否正确安装了Mpdf的依赖,尤其是字体文件有没有缺失(Mpdf的字体包通常在
vendor/mpdf/mpdf/fonts目录下) - 确认你的HTML文本本身是纯UTF-8编码,没有经过其他转码导致乱码
内容的提问来源于stack exchange,提问作者Abbas
相关产品推荐
相关产品推荐

