Слетела кодировка csv не понимает кириллицу

183
14 марта 2022, 16:30

Контроллер:

public function export (Request $request)
{
    $dateStart = $request->dateStart;
    $dateFinish = $request->dateFinish;
    $table = Orders_user::where('created_at', '>=', date($dateStart))->where('created_at', '<=', date($dateFinish))->get();
    // dd($table);
    $filename = "test2.csv";
    $handle = fopen($filename, 'w+');
    // fprintf($handle, chr(0xEF).chr(0xBB).chr(0xBF));
    fputs($handle, chr(0xEF) . chr(0xBB) . chr(0xBF)); // BOM
    @fputcsv($handle, array('sep=,'));
    fputcsv($handle, array('Imya','Telephone', 'Nomer zayavok', 'Gorod', 'Address', 'Obshaya cena', 'status', 'Vid oplaty', 'shippingttype', 'email'));
    foreach($table as $row) {
        fputcsv($handle, array(iconv('utf-8', 'windows-1251', $row['name']), 
        iconv('utf-8', 'windows-1251', $row['phone']), 
        iconv('utf-8', 'windows-1251', $row['description']), 
        iconv('utf-8', 'windows-1251', $row['city']), 
        iconv('utf-8', 'windows-1251', $row['address']), 
        iconv('utf-8', 'windows-1251', $row['totalprice']), 
        iconv('utf-8', 'windows-1251', $row['status']), 
        iconv('utf-8', 'windows-1251', $row['paymenttype']), 
        iconv('utf-8', 'windows-1251', $row['shippingttype']), 
        iconv('utf-8', 'windows-1251', $row['email'])
        ));
    }
    fclose($handle);
    $headers = array(
        'Content-Type' => 'text/csv',
    );
    return Response::download($filename, 'test.csv', $headers);
}
Answer 1

Я делаю следующим образом: Во первых заголовки

$headers = array(
        "Content-type" => 'application/excel',
        "Content-Disposition" => "attachment; filename=base_"." (".date("d.m.Y").")".".csv",
        "Pragma" => "no-cache",
        "Cache-Control" => "must-revalidate, post-check=0, pre-check=0",
        "Expires" => "0"
    );

Во вторых

$columns = ['Imya','Telephone', 'Nomer zayavok', 'Gorod', 'Address', 'Obshaya cena', 'status', 'Vid oplaty', 'shippingttype', 'email'];
$callback = function() use ($table, $columns)
    {
        $file = fopen('php://output', 'w');
        fputs($file, chr(0xEF) . chr(0xBB) . chr(0xBF)); // BOM
        fputcsv($file, $columns, ';','"');
        foreach($table as $row) {
            fputs($file, chr(0xEF) . chr(0xBB) . chr(0xBF));
            fputcsv($file, $row, ';','"');
        }
        fclose($file);
    };
    return \response()->stream($callback, 200, $headers);

Понимаешь да смысл и разницу...

READ ALSO
Разбиение скрипта на части

Разбиение скрипта на части

Есть скрипт, который парсит прайс в формате XMLОн написан так, что берёт в память объект XML и преобразует его в нужный вид, передавая данные...

147
Docker не запускает контейнер php-cli

Docker не запускает контейнер php-cli

Всем привет, подскажите пожалуйста почему не запускается контейнер?

149
Как использовать Express js? Вывод базы данных mysql в HTML

Как использовать Express js? Вывод базы данных mysql в HTML

Пишу сайтДелаю всё по информации в интернете и урокам

124