Stack Overflow на русском Asked on February 24, 2021
Использую пакет Maatwebsite/Laravel-Excel. Сделал экспорт csv файла:
return (new DoorphoneExport)->download('doorphones.csv', Excel::CSV);
В конфиге прописал:
'csv' => [
'delimiter' => ',',
'enclosure' => '"',
'line_ending' => PHP_EOL,
'use_bom' => true,
'include_separator_line' => false,
'excel_compatibility' => false,
],
Проблема в том, что создаётся csv файл в формате UTF-8. Как его изменить на windows-1251 ?
Использование диска приведет к задержке.
Кроме того, если придет 2 одновременных запроса, они будут писать в один файл, и один из них не сможет это сделать.
Как сделать лучше: использовать потоки. Конкретно в вашем случае в документации даже показано как это сделать: php.net - в этом примере пишется в php://output
. Чтобы отдавать в виде response
, нужно писать в php://memory
, получится так:
<?php
// пример текста
$text = "текст в кодировке utf-8";
$fp = fopen('php://memory', 'w');
stream_filter_append($fp, 'convert.iconv.utf-8.cp1251', STREAM_FILTER_WRITE);
/**
* замените эту часть на (new DoorphoneExport)->store($fp);
*/
fwrite($fp, $text);
rewind($fp);
$data = stream_get_contents($fp);
/**
* замените эту часть на return response($data);
*/
echo $data;
Correct answer by Total Pusher on February 24, 2021
Решение: сохранил в файл, изменил кодировку, отправил результат в response
(new DoorphoneExport)->store('doorphones.csv');
$text = file_get_contents(storage_path('app') . '/doorphones.csv');
$csv = mb_convert_encoding($text, "windows-1251", "utf-8");
return response($csv);
Answered by Айрат Исмагилов on February 24, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP