Задать вопрос

Корректный экспорт csv в utf-8 with BOM

Нужно экспортировать данные из БД, чтобы открыть в excel.
Создаю csv где separator - знак \t.
Кодировка в базе utf-8, в php тоже utf-8, при экспорте использую такие заголовки:
header("Content-Type:   application/vnd.ms-excel; charset=utf-8");
header("Content-Disposition: attachment; filename=".$dt.".xls");
header("Pragma: no-cache");


Английские буквы нормально, русские excel не видит. Если открыть csv файл локально и сохранить with BOM - всё работает.

Если добавить BOM перед выводом контента - excel понимает русские буквы, но не видит сепаратора "\t" - т.е. по столбцам не разбивается, все столбцы сливаются в каждой строке.

Пробовал другие сепараторы - их excel не понимает по умолчанию.

Как быть? как отправить csv, чтобы excel открыл корректно?
  • Вопрос задан
  • 13255 просмотров
Подписаться 2 Оценить Комментировать
Ответ пользователя glukkkk К ответам на вопрос (2)
glukkkk
@glukkkk
У меня всё корректно Excel определяет. Использую разделитель точка с запятой и перед записью в .csv вставляю BOM:

$csv = fopen('file.csv', 'w');
fprintf($csv, chr(0xEF).chr(0xBB).chr(0xBF));
...
Ответ написан
Комментировать