2015-05-09 7 views
0

Я хочу сохранить некоторые данные в файлах с именами файлов, которые будут содержать в нем символы Юникода (например, китайский, кириллический, арабский, ...) с функциями PHP file_put_contents(). Я не хочу их кодировать отдельно с чем-то вроде urlencode(), потому что ни один человек не сможет прочитать имена файлов, если они содержат только нелатинские символы. 3 крупнейших ОС Windows, MacOS/OS X и Linux поддерживают символы UTF-8 или UTF-16 в именах файлов и могут отображать их без проблем, но кажется, что это не так просто, как просто называть что-то вроде этого:PHP: file_put_contents() с именем Unicode

file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "こんにちは.txt", ""); 

в Windows 7 (немецкая локализация) файл сохраняется как:

ã“ã‚“ã«ã¡ã¯.txt 

сам PHP файл сохраняется в UTF-8 кодировке. Существует ли единый способ сохранения файлов с unicode в имени файла в этих трех системах?

+0

Вы видели [это] (http://stackoverflow.com/a/25395755/1459926)? –

+0

urlify не может помочь с китайским и т. Д. Используйте iconv ('utf', 'local charset // translit', ...) или используйте объекты PHP COM. – Deadooshka

+0

@AlexandruGuzinschi Да, но это не касается моей проблемы. – StanE

ответ

0

Как ответ here Это известная проблема с Windows (glob() can't find file names with multibyte characters on Windows?).

Вы можете попробовать URLify, чтобы разрешить эту проблему только на Windows, файлы должны иметь считываемые имена затем ...

+0

Мне не нужны другие имена файлов (они не должны быть разными). URL-адрес изменяет символы на совершенно другие символы или полностью опускает их. В OS X 10.9.5 у меня такая же проблема, но здесь имя файла из приведенного выше примера приводит к результату. Txt – StanE

+0

Хорошо работает для меня в PHP 5.6.3 и Yosemite (OSX 10.10.3). В Windows ваш единственный шанс использовать объект COM ... цитата из комментария в этой угрозе (http://stackoverflow.com/a/9882557/3950202): «[...] это было быстро подтверждено одним из Core devs в этом же потоке. В основном, ваш единственный шанс - использовать COM или принять тот факт, что PHP на windows не способен это сделать ». –

0

file_put_contents(__DIR___.iconv("UTF-8", "cp1251", $filename), $data); - отлично работает!

+0

К сожалению, не работает. Попробуйте '$ filename =" 平 が な приветSpäß.txt ";'. iconv() говорит «Обнаружен незаконный символ в строке ввода» и отбрасывает символы. Использование «// TRANSLIT» транслитерирует их (я хочу оригинальные символы), а «// IGNORE» отменит их молча. – StanE

 Смежные вопросы

  • Нет связанных вопросов^_^