TransWikia.com

Преобразовать UTF-8 кодировку в windows-1251

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 Answers

Использование диска приведет к задержке.

Кроме того, если придет 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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP