使用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
相关产品推荐
相关产品推荐

