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

使用mPDF库保存含泰文字符文件名的PDF文件异常求助

解决mPDF保存泰文文件名乱码的问题

嘿,我之前也踩过mPDF处理非英文文件名的坑,尤其是泰文这类Unicode字符,给你几个实用的解决思路:

先搞懂为啥会乱码

mPDF的Output('F')方法在保存文件时,对UTF-8编码的文件名支持不太到位,再加上服务器文件系统的编码差异,就导致泰文变成了一堆乱码字符。

一步步解决

1. 先把基础编码拉正

首先确保你的PHP文件是UTF-8无BOM编码(编辑器里就能设置),然后在代码开头加上这句,强制PHP用UTF-8处理字符串:

mb_internal_encoding('UTF-8');

2. 确保文件名本身是正确的UTF-8

先确认$classroom里的泰文没乱码,然后给文件名做个编码校验转换:

$save_file = $s_code . '_' . $classroom . '.pdf';
// 强制转成标准UTF-8,避免变量本身编码不一致
$save_file = mb_convert_encoding($save_file, 'UTF-8', mb_detect_encoding($save_file));

3. 换个保存方式(亲测有效)

我后来发现用PHP原生的file_put_contents替代mPDF的Output('F'),对Unicode文件名的支持稳定很多:

// 先把PDF内容转成字符串
$pdf_content = $mpdf->Output('', 'S');
// 拼好完整路径
$save_path = '../../../upload/' . $save_file;
// 原生方法写入文件
file_put_contents($save_path, $pdf_content);

4. Windows服务器特殊处理

如果你的服务器是Windows,默认文件编码是GBK,这时候需要把UTF-8的文件名转成GBK:

// 用TRANSLIT参数让无法转换的字符生成近似替代,减少乱码
$save_file = iconv('UTF-8', 'GBK//TRANSLIT', $save_file);

最后验证下

  • 先单独echo $save_file,看看泰文显示正常不
  • 确认服务器的上传目录所在的文件系统支持UTF-8(Linux基本都支持,Windows 10以上可以设置系统编码为UTF-8)

内容的提问来源于stack exchange,提问作者Wasinha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:47:51