以下是文件名的一些示例:
漢語.jpg (Chinese)
Федерация.jpg (Russian)
AbÇöişÜĞ.jpg (Turkish, ISO-8859-9)
...
我试过rawurlencode(mb_convert_encoding($file, "UTF-8", mb_detect_encoding($file)))
了,但这不起作用,所有中文和俄文字符都打印为 %3F(常规问号),所有土耳其文字符都被删除。
我正在 Windows,PHP 5.3 上进行测试。
我找到的唯一解决方案是显式输入编码:rawurlencode(mb_convert_encoding($file, "UTF-8", "ISO-8859-9"))
这仅适用于土耳其语字符。
顺便说一句,mb_detect_encoding($file)
上述文件总是返回“UTF-8”。
编辑:
运行以下代码后,我认为mb_convert_encoding()
无法解决我的问题:
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("mp", FilesystemIterator::UNIX_PATHS));
$iterator = new RegexIterator($iterator, '/^.+\.(gif|jpg|jpeg|png)$/i', RegexIterator::GET_MATCH);
foreach ($iterator as $file)
{
foreach (mb_list_encodings() as $encoding)
var_dump(rawurlencode(mb_convert_encoding($file[0], "UTF-8", $encoding)) . " : " . $encoding);
}
我想这是关于编码的事情,但我不知道该怎么做。