我已经在互联网上搜索了所有的SO,但在以下方面仍然没有运气:
我想知道,当文件名有一些unicode字符时,如何使用file_put_contents
正确保存文件。(Windows 7作为操作系统)
$string = "jérôme.jpg" ; //UTF-8 string
file_put_contents("images/" . $string, "stuff");
在文件中重新出现:
jГ©rГґme.jpg
尝试了iconv
和mb_convert_encoding
等函数与所有可能的编码的所有可能组合,并将源文件转换为不同的编码。设置了所有正确的标题,浏览器可以正确识别UTF-8
。
然而,我可以在explorer的GUI中成功地复制粘贴并创建一个具有这样名称的文件,但如何通过PHP实现呢?
最后一个核心解决方案是urlencode
字符串并保存文件。
这可能很晚了,但我刚刚找到了一个解决方案来解决这个对我来说很痛苦的问题。忘记iconv和多字节解决方案;问题出在Windows上!(在链接中,你会发现这一切的美妙之处。)
经过无数次尝试和方法来解决这个问题,我遇到了URLify,并决定处理文件名中unicode的最佳方法是在写入文件之前对其进行音译。
保存前音译文件名的示例:
$filename = "Αρχείο.php"; // greek name for 'file'
echo URLify::filter($filename,128,"",TRUE);
// output: arxeio.php