微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Laravel 中使用 Laravel Excel 设置导出 csv 的编码

如何解决如何在 Laravel 中使用 Laravel Excel 设置导出 csv 的编码

我使用 Laravel Excel 在 Laravel 中导出 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);

解决方法

您需要配置您的 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。