@mister00003

Как установить кодировку при выгрузке данных в CSV?

62f22dfeb03db980960960.png

$headers = array(
                "Content-type" => "text/csv;charset=Windows-1252",
                "Content-Encoding" => "Windows-1252",
                "Content-Disposition" => "attachment; filename=file.csv",
                "Pragma" => "no-cache",
                "Cache-Control" => "must-revalidate, post-check=0, pre-check=0",
                "Expires" => "0"
            );


Пробовал менять на UTF-8 - также.

case 'exam':
                    $items = Exam::whereIn('id', $ids)->get();
                    $columns = array('id', 'name', 'surname', 'middle_name', 'phone', 'email', 'date', 'time', 'type');

                    $callback = function () use ($items, $columns) {
                        $file = fopen('php://output', 'w');
                        fputcsv($file, $columns);

                        foreach ($items as $item) {
                            fputcsv($file, array(
                                $item->id,
                                $item->name,
                                $item->surname,
                                $item->middle_name,
                                $item->phone,
                                $item->date,
                                $item->time,
                                $item->type
                            ));
                        }



                        fclose($file);
                    };
                    break;
  • Вопрос задан
  • 25 просмотров
Пригласить эксперта
Ответы на вопрос 2
@alexalexes
Судя по преобладающим артефактам Р и С в некорректных символах, у вас строки в utf-8 открываются в кодировке windows-1251.
Попробуйте либо правильно указать заголовок:
"Content-type" => "text/csv;charset=utf-8",
либо перекодировать строковые атрибуты из utf-8 в windows-1251:
fputcsv($file, array(
                                $item->id,
                                mb_convert_encoding($item->name, 'cp1251', 'utf-8'),
                                mb_convert_encoding($item->surname, 'cp1251', 'utf-8'),
                                mb_convert_encoding($item->middle_name, 'cp1251', 'utf-8'),
                                $item->phone,
                                $item->date,
                                $item->time,
                                $item->type
                            ));
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Проблема не в заголовке, так как по сути то что вы отсылаете может быть в любой кодировке, не зависимо от заголовка. Судя по всему вы открываете его экселем, и не указываете кодировку при открытии. Сам текст у вас вписан в утф8, но эксель его открывает по умолчанию в 1251, для винды с русским интерфейсом. Для открытия в утф8 выбирайте меню данные - из текста, выбираете файл - далее будет окошко настроек импорта, - задаете разделители и ставите кодировку утф8.

Ну или на сервере конвертируйте в 1251 нужный текст...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы