【问题标题】:Laracsv UTF-8 encodingLaracsv UTF-8 编码
【发布时间】:2019-07-17 13:45:23
【问题描述】:

寻找如何使用 UTF-8 编码将数据从数据库导出到 CSV 的解决方案。 Laravel 框架。使用 Laracsv 插件。但是获取带有损坏符号的数据(下图),以及用于获取列表的函数:

public function store(Request $request)
    {
        $list_id = new Event;
        $list_id = $request->input('event_id');
        $users = Player::where('event_id',$list_id)->get(); // All users
        $csvExporter = new \Laracsv\Export();
        $csvExporter->build($users, ['name', 'surname', 'birtday', 'city', 'country', 'rating', 'tel', 'email', 'group'])->download();
    }

【问题讨论】:

    标签: laravel csv encoding utf-8


    【解决方案1】:

    您实际上可以将标题添加到您的下载中,但您需要回退到底层的 League CSV 库。

    首先你需要通过调用来获取底层的 League CSV 实例:

    $csv = $csvExporter->getCsv();
    

    然后,为了让 Microsoft Excel 能够正确地将文件识别为 UTF8 CSV,您还需要添加 BOM (https://en.wikipedia.org/wiki/Byte_order_mark)。为此,您可以再次使用 League CSV 的功能:

    $csv->setOutputBOM(\League\Csv\Reader::BOM_UTF8);
    

    然后将 csv 字符串作为 Laravel 响应对象返回,其标题如下:

    return response((string) $csv)
            ->header('Content-Type', 'text/csv; charset=UTF-8')
            ->header('Content-Disposition', 'attachment; filename="whatever.csv");
    

    【讨论】:

      【解决方案2】:

      根据包的文档,它不允许在下载中传递headers。一个简单的解决方法可能是

      1. 获取包正在使用的writer对象League/CSV

        $writer = $csvExporter->build($user, ['name', 'surname', 'birtday', 'city', 'country', 'rating', 'tel', 'email', 'group'])->getCSV();
        

      Reference ^

      1. 现在保存这个文件

        Storage::disk('local')->put('download.csv', $writer->getContent()); 
        

      Refernce ^

      3.通过response对象下载这个

      return response()->download('patht-to-file', 'download.csv', ['Content-Type' => 'text/csv; charset=utf-8'])
      

      【讨论】:

      • 您好,感谢您的回答,但在您的示例中,我得到 ErrorException Undefined variable: writer
      • 我在上面的代码中修复了一个变量名拼写错误。检查是否是这个原因。否则请说明是哪一行导致错误。
      • 嗨,现在代码正在运行,但我仍然得到一个没有 UTF-8 编码的列表
      • 如果响应标头中提到了charset,您是否检查了下载请求的请求日志?
      猜你喜欢
      • 2011-10-30
      • 2012-11-07
      • 2015-03-04
      • 2016-07-05
      • 1970-01-01
      • 2015-11-15
      • 2011-04-27
      • 2012-09-22
      • 1970-01-01
      相关资源
      最近更新 更多