Я получаю файл с фарерским именем и пытаюсь сохранить его в сценарии PHP:
2010_08_Útflutningur.xls
В Ubuntu 10.04 LTS сохраняет его как:
2010_08_�tflutningur.xls (invalid encoding)
Я установил и запустил utf8-migration-tool
, но без эффекта.
Это ошибка Ubuntu, которую я могу исправить, или мне просто нужно отказаться и изменить имя в php?
Есть ли документ, в котором говорится, что является приемлемым набором символов для имени файла в Ubuntu, или каковы спецификации кодирования?
Спасибо
Ответы:
Это похоже на проблему кодировки. К сожалению, PHP нуждается в некоторой выдержке, когда дело доходит до кодирования, потому что его строки по умолчанию однобайтовые. Если вы создаете имя файла в PHP,
utf8_encode()
должно быть полезно; заметьте, однако, что он принимает кодировку ISO-8859-1 для ввода.С другой стороны, если вы используете имя файла, отправленное клиентом, возможно, вы можете запросить кодировку для клиента. Это делается с помощью
accept-charset
атрибута<form>
тега и / или путем установки кодировки страницы, на которой находится форма. Некоторые клиенты могут использовать один или другой, поэтому для достижения наилучших результатов используйте UTF-8 для каждого.источник
По умолчанию Ubuntu использует UTF-8 для имен файлов. Большинство современных дистрибутивов Linux и многие другие операционные системы делают это (Windows / NTFS - самое известное исключение с UTF-16).
Чтобы исправить файлы с именами в неправильной кодировке, например, той, которую вы показываете, вы можете попробовать использовать
nautilus-filename-repairer
Вы можете использовать
iconv
функции PHP для преобразования строк (имен файлов) из одной кодировки в другую. Конечно, для этого нужно знать, в какой кодировке они находятся.Чтобы получить правильно закодированные имена файлов от клиента, вы можете попробовать методику, объясненную eswald.
источник