【问题标题】:How can I set encoding for export csv with Laravel Excel in Laravel如何在 Laravel 中使用 Laravel Excel 设置导出 csv 的编码
【发布时间】:2021-04-26 12:30:17
【问题描述】:

我在 Laravel 中使用 Laravel Excel 导出 CSV 文件。 如何设置导出 csv 文件的编码。

我尝试了几种方法:

  1. 更改excel.php 中的配置
'use_bom' => false,
  1. 使用 mb_convert_encoding 将内容转换为导出前。
$exportData = mb_convert_encoding($exportData, "SJIS", "UTF-8");  
$pblClassExport = new \App\Exports\PblClassExport($exportData, 'test.csv');

但它不起作用。 csv文件的编码根据文件内容自动改变:( 我希望得到你的帮助。 非常感谢!

.......................更新...................... ......

我解决了。
让我在这里分享我的解决方案。
Laravel Excel 默认不支持。 但是我们可以通过简单的方式做到这一点。

  1. 下载前获取csv内容:\Excel::raw

  2. 转换为另一种编码:mb_convert_encoding https://docs.laravel-excel.com/3.1/exports/collection.html#storing-raw-contents

  3. 下载 csv。

    $exportedObject= new \App\Exports\ClassExport($exportDataArray, $fileName);
    $csvContent = \Excel::raw($exportedObject, $exportedObject->writerType);

    $csvContent = mb_convert_encoding($csvContent, 'SJIS', 'auto');

    // 就我而言,我将 csv 上传到 S3。 $storageInstance = \Storage::disk('s3_import_csvs');
    $putFileOnStorage = $storageInstance->put($fileName, $csvContent);

【问题讨论】:

  • 为什么需要设置?编码?
  • @KamleshPaul 感谢您的回复。我正在使用第三方服务,上传 csv 文件所需的服务编码为 SJIS 。

标签: laravel encoding laravel-excel


【解决方案1】:

您需要配置您的 PblClassExport.php 标头

PblClassExport.php


/**
 * Optional headers
*/
private $headers = [
    'Content-Type' => 'text/csv',
    'Content-Encoding'=> 'SHIFT-JIS' // somthing like this ?
];

我还没有这样做,但我认为它会起作用

参考链接

https://docs.laravel-excel.com/3.1/exports/exportables.html#exportables


更新

你可以逐行编码

public function bindValue(Cell $cell, $value)
{
    $value = mb_convert_encoding($value, "SJIS");
    return parent::bindValue($cell, $value);
}

参考链接https://www.gitmemory.com/issue/Maatwebsite/Laravel-Excel/1886/552849170

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-10
  • 1970-01-01
  • 2019-03-12
  • 2023-04-05
  • 1970-01-01
相关资源
最近更新 更多