Вот пример имен файлов:
漢語.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);
}
Я думаю, что это что-то вроде кодирования, но я не знаю, как это сделать.