使用unicode字符保存文件名


Save filename with unicode chars

我已经在互联网上搜索了所有的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

尝试了iconvmb_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