PHP обнаруживает кодировку / сохранение файловой системы с нелатинскими именами файлов - PullRequest
8 голосов
/ 26 марта 2010

Мне нужно сохранить файлы с нелатинскими именами файлов в файловой системе, используя PHP.

Я хочу сделать эту работу кроссплатформенной. Как узнать, какую кодировку я могу использовать для записи файла? Я понимаю, что многие современные файловые системы основаны на UTF-8 (это правильно?), Но я сомневаюсь, что Windows XP (например).

Итак, есть ли надежный механизм обнаружения?

Ответы [ 2 ]

6 голосов
/ 26 марта 2010

Не ответ на ваш вопрос, но если вам не нужно выполнять обширные операции на уровне файловой системы (например, поиск, сортировка ...), есть хороший межплатформенный обходной путь для проблемы, описанной в этот ТАК вопрос : URLEncode() имя файла.

Hörensägen.txt 

превращается в

H%c3%b6rens%c3%a4gen.txt

, который должен быть безопасным для использования в любой файловой системе и может отображать любой символ UTF-8.

Я считаю, что это гораздо предпочтительнее, чем пытаться "изначально" работать с возможностями ОС, которая гарантированно является сложной и подверженной ошибкам (помимо различий в операционных системах, я уверен, что существуют различные форматы файловой системы - FAT16 FAT32, NTFS, extFS версии 1/2/3 .... имеют собственный набор правил, о которых следует знать.)

0 голосов
/ 30 марта 2018

PHP 7.1 поддерживает имена файлов UTF-8 в Windows (у меня была проблема с обслуживанием файла с кириллицей в его имени, пока я не обновил PHP - и Apache), поэтому, если вы можете просто обновить PHP, это самый надежный и кроссплатформенное решение в наши дни.

Мне даже не нужно ini_set('mbstring.internal_encoding','UTF-8'); для file_get_contents для правильной работы с нелатинскими путями.

...