проблема кодировки имени файла

9

Я получаю файл с фарерским именем и пытаюсь сохранить его в сценарии PHP:

2010_08_Útflutningur.xls

В Ubuntu 10.04 LTS сохраняет его как:

2010_08_�tflutningur.xls (invalid encoding)

Я установил и запустил utf8-migration-tool, но без эффекта.

Это ошибка Ubuntu, которую я могу исправить, или мне просто нужно отказаться и изменить имя в php?

Есть ли документ, в котором говорится, что является приемлемым набором символов для имени файла в Ubuntu, или каковы спецификации кодирования?

Спасибо

Эльзо Валуги
источник
Как вы получаете и сохраняете файл через PHP? (Как выглядит код?)
Kees Cook
Я разбирал его из почтовой системы. Код сложен :)
Эльзо Валуги
Есть аналогичные вопросы и ответы со скриптом для восстановления поврежденных имен файлов.
поясничный

Ответы:

5

Это похоже на проблему кодировки. К сожалению, PHP нуждается в некоторой выдержке, когда дело доходит до кодирования, потому что его строки по умолчанию однобайтовые. Если вы создаете имя файла в PHP, utf8_encode()должно быть полезно; заметьте, однако, что он принимает кодировку ISO-8859-1 для ввода.

С другой стороны, если вы используете имя файла, отправленное клиентом, возможно, вы можете запросить кодировку для клиента. Это делается с помощью accept-charsetатрибута <form>тега и / или путем установки кодировки страницы, на которой находится форма. Некоторые клиенты могут использовать один или другой, поэтому для достижения наилучших результатов используйте UTF-8 для каждого.

eswald
источник
7

По умолчанию Ubuntu использует UTF-8 для имен файлов. Большинство современных дистрибутивов Linux и многие другие операционные системы делают это (Windows / NTFS - самое известное исключение с UTF-16).

Чтобы исправить файлы с именами в неправильной кодировке, например, той, которую вы показываете, вы можете попробовать использовать nautilus-filename-repairer

sudo apt-get install nautilus-filename-repairer

Вы можете использовать iconvфункции PHP для преобразования строк (имен файлов) из одной кодировки в другую. Конечно, для этого нужно знать, в какой кодировке они находятся.

Чтобы получить правильно закодированные имена файлов от клиента, вы можете попробовать методику, объясненную eswald.

Janc
источник