Web Hole

Экспорт в EXCEL (.CSV) на php. Проблема с кодировками

Пример для конвертации из PHP в .CSV

Несколько строчек кода могут сделать чудо.
Результат работы кода можно использовать для импорта в Excel, Access, phpmyadmin и другие знакомые с форматом .CSV приложения.

CSV файлы хранятся в кодировке UTF-16 Little Endian. Чтобы сконвертировать текст из более распространенной в веб приложениях кодировки UTF- 8 в  понятный EXCEL'ю  файл можно воспользоваться следующим кодом:
(Подразумевается, что переменная $data содержит разделенные символами табуляции текстовые данные )

<?php<br />
$data = mb_convert_encoding($data, "UTF-16LE", "UTF-8");<br />
$data = chr(hexdec('FF')) . chr(hexdec('FE')) . $data;<br />
header("Content-type: text/csv");<br />
header("Content-Disposition: attachment; \r\nfilename=\"data.csv\"");<br />
echo $data<br />
?>

Первая строка: конвертирует данные в нужную кодировку для EXCEL из UTF-8 (Если ваши данные скаем в кодировке windows-1251, то вместо третьего параметра в кавычки впишите CP1251).
Вторая строка: добавляет Byte Order Mark, или BOM.
Все остальное выставляет правильные хедеры (headers), чтобы браузер знал как открыть файл и выдает перекодированные данные.

BOM — (маркер порядка байтов ?) сообщает приложению в каком из вариантов юникода написан весь файл.

источник: Producing a .CSV document in PHP (for Excel, for example)

полезно: Конвертация XML в ассоциативный массив на php

Comments

5 Responses to “Экспорт в EXCEL (.CSV) на php. Проблема с кодировками”
  1. Samborsky:

    Довольна странная перелинковка на блоге.

    Все слова php, csv и т.п. ведут на теги. В чем смысл? По моему она только мешает. Ч-з aLinks сделал?

  2. симпл тагс вроде. смотрит текст и если находит в тексте таги, автоматом вставляет на них линки.

    так, поиграться включил.

  3. Sych:

    pear.php.net/package/Spre...et_Excel_Writer/ — пхпшный экспортер в «настоящий» Эксель. Очень прост в понимании, работает отменно.

  4. Bacek:

    Вот это да... Много комментариев и почти ни одного по теме :)

  5. Kira:

    У меня в сохраняемом таким образом файле разделители не воспринимаются как разделители.Весь поток инфы идет одним потоком. Пробовала в строке разделители и , и ;. В чем проблема???

Speak Your Mind

Tell us what you're thinking...
and oh, if you want a pic to show with your comment, go get a gravatar!

You must be logged in to post a comment.

Web Hole