Я хочу сохранить некоторые данные в файлах с именами файлов, в которых есть символы Юникода (например, китайский, кириллица, арабский, …) с помощью PHP-функции file_put_contents (). Я не хочу кодировать их отдельно с помощью чего-то вроде urlencode (), потому что ни один человек не сможет прочитать имена файлов, если они содержат только нелатинские символы. Три самые большие ОС Windows, MacOS / OS X и Linux поддерживают символы UTF-8 или UTF-16 в именах файлов и могут отображать их без проблем, но кажется, что это не так просто, как просто вызвать что-то подобное:
file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "こんにちは.txt", "");
В Windows 7 (немецкая локализация) файл хранится как:
ã“ã‚“ã«ã¡ã¯.txt
Сам файл PHP сохраняется в кодировке UTF-8. Существует ли единый способ сохранения файлов с юникодом в имени файла на этих 3 системах?
Как ответили Вот Это известная проблема Windows (glob () не может найти имена файлов с многобайтовыми символами в Windows?).
Вы могли бы попробовать URLify чтобы облегчить проблему только в Windows, файлы должны иметь читаемые имена …
file_put_contents(__DIR___.iconv("UTF-8", "cp1251", $filename), $data);
— работает отлично!