FPDF添加中欧编码字体后Š、Č等特殊字符乱码如何解决
问题原因
你遇到的乱码是典型的字符编码不匹配问题:你输入的文本是UTF-8编码,但生成字体时选择的是ISO-8859-2编码,FPDF原生不会自动处理编码转换,直接输出UTF-8文本就会出现字符解析错误。
解决方案
方法1:转码适配现有字体(快速修复)
如果你不想重新生成字体,只需要在输出文本前,把UTF-8编码的字符串转为ISO-8859-2编码即可,可使用iconv或mb_convert_encoding函数实现:
// 方案1:使用iconv转码,//TRANSLIT参数会自动替换无法识别的字符为近似字符 $text = "Plačilo odkupnine"; $converted_text = iconv('UTF-8', 'ISO-8859-2//TRANSLIT', $text); $pdf->Cell(0, 10, $converted_text); // 方案2:使用mb_convert_encoding转码 $converted_text = mb_convert_encoding($text, 'ISO-8859-2', 'UTF-8');
使用前请确认你的PHP环境已开启对应的字符处理扩展。
方法2:生成UTF-8编码字体(推荐,一劳永逸)
如果不想每次输出都做转码处理,可以重新生成支持UTF-8编码的字体文件:
- 重新上传字体源文件到字体生成工具,编码选择UTF-8后重新生成字体配置文件
- 替换项目中旧的字体文件,调用字体后可直接输出UTF-8文本,无需额外转码:
$pdf->AddFont('AbhayaLibre', '', 'AbhayaLibre-Regular.php'); $pdf->SetFont('AbhayaLibre', '', 12); // 直接输出UTF-8文本即可 $pdf->Cell(0, 10, 'Plačilo odkupnine');
注意事项
- 提前确认你使用的AbhayaLibre字体本身包含Š、Č这类中欧字符的字形,部分字体缺字会导致编码正确也显示异常
- 不要同时使用转码和UTF-8字体,否则会出现二次转码导致的新乱码
内容的提问来源于stack exchange,提问作者Anass Hl
相关产品推荐
相关产品推荐

