frost18
@frost18
Программист PHP

Как исправить баг с кодировкой при экспорте в CSV?

public function actionTest(){
    $content = '"Привет мир";"test"';
    $this->stream($content, 'contacts.cvs');
}

private function stream($content, $name){
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.$name);
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: '.strlen($content));
    echo $content;
    exit();
}

Скачивается файл, при открытии его в excel, за место русских символов появляются кракозябры. Если открыть файл в Notepad++ и выставить "utf-8 без BOM", то все отлично.
Функция удаления BOM не работает:
function remove_utf8_bom($text){
    $bom = pack('H*','EFBBBF');
    $text = preg_replace("/^$bom/", '', $text);
    return $text;
}

Вопрос, как сделать так что бы в excel файл открывался в правильной кодировки?
  • Вопрос задан
  • 4236 просмотров
Пригласить эксперта
Ответы на вопрос 2
arutyunov
@arutyunov
Mooza.ru — Делаем сайты
Это проблема в самом Excel — погуглите как правильно открывать екселевские файлы в UTF-8 (через импорт данных, по-моему).

artkiev.com/blog/excel-import-csv-utf-8.htm
Ответ написан
frost18
@frost18 Автор вопроса
Программист PHP
Нашел решение, не знаю на сколько оно верное, добавил BOM.
static function addBOM($text){
    return chr(239).chr(187).chr(191).$text;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы