2014-01-13 3 views
2

У меня возникла проблема с отправкой правильной информации о кодировке через заголовок в PHP.Отправка правильного заголовка charset для iso-8859-2

В моем коде я создал CSV-строку, которая кодируется ISO-8859-2. Я вывода этого в браузер, используя следующий код (упрощенный):

$csv = 'iso-8859-2 encoded string, Łukasz Szukała'; 

header('Content-Type: text/csv; charset=ISO-8859-2'); 
header('Content-Disposition: attachment; filename=report.csv'); 

echo $csv; 

Полученный файл детектируется как ISO-8859-1, при открытии его с редактором (я использую Notepad ++) и, следовательно, отображается неправильно ,

Преобразование строки в UTF-8 работает как и ожидалось:

$csv = 'iso-8859-2 encoded string, Łukasz Szukała'; 
$csv = iconv('ISO-8859-2', 'UTF-8', $csv); 

header('Content-Type: text/csv; charset=UTF-8'); 
header('Content-Disposition: attachment; filename=report.csv'); 

echo $csv; 

Я могу даже полностью опустить кодировок часть в этом случае.

Однако мне нужен файл для кодирования ISO-8859-2, и я не понимаю, почему информация заголовка не приведет к обнаружению файла как ISO-8859-2. Я также пробовал разные псевдонимы в соответствии с IANA (http://www.iana.org/assignments/character-sets/character-sets.xhtml), но я не могу заставить его работать в любом браузере.

Значительно ценим любые значения ввода.

ответ

1

Вы делаете все правильно, за исключением того, что ожидаете Notepad ++ обнаружить набор символов файла. Строго говоря, ISO-8859-2 не кодируется, а набор символов.

Файл, который открывается редактором (любым), представляет собой простой текст без заголовков, который вы отправили в браузер. Поэтому редактор может обнаружить, что это однобайтная кодировка, но обнаружение набора символов невозможно, поэтому он открывается по умолчанию в системном наборе символов.

См my answer об кодировании с обнаружением

Вашего файла имеет еще правильную кодировку, но Notepad ++ просто отображая его неправильно. Кодирование UTF-8 - другое дело, потому что у него нет наборов символов и он всегда отображается правильно (я думаю).

+0

Да, я только что понял, что вся информация заголовка теряется, как только файл сохраняется локально. –

 Смежные вопросы

  • Нет связанных вопросов^_^