У меня есть файл, содержащий символы Unicode на сервере с Linux. Если я использую SSH на сервере и использую tab-completion для перехода к файлу/папке, содержащей символы Unicode, у меня нет проблем с доступом к файлу/папке. Проблема возникает, когда я пытаюсь получить доступ к файлу через PHP (функция, к которой я обращалась в файловой системе, была stat
). Если я выведу путь, сгенерированный PHP-скриптом, в браузер и вставляю его в терминал, файл также, кажется, существует (даже если смотреть на терминал, пути к файлу точно такие же).UTF8 Имена файлов в PHP и разных кодировках Unicode
Я установил PHP для использования UTF8 в качестве кодировки по умолчанию через php_ini, а также для установки mb_internal_encoding
. Я проверил строчную кодировку с файловым файлом PHP, и он выходит как UTF8, как и следовало ожидать. Еще несколько раз, я решил, что символ é, который завершает вкладку терминала, сравнивает его с hexdump
«обычного» символа, созданного скриптом PHP, или вручную вводит символ через клавиатуру (опция + e + e на os x). Вот результат:
echo -n é | hexdump 0000000 cc65 0081 0000003 echo -n é | hexdump 0000000 a9c3 0000002
Символ é, который позволяет корректно ссылаться на файл в терминале, является 3-байтным. Я не уверен, куда идти отсюда, какую кодировку я должен использовать в PHP? Должен ли я преобразовывать путь в другую кодировку через iconv
или mb_convert_encoding
?