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