【问题标题】:Php csv export downloaded as Windows-1252 instead of utf_8PHP csv 导出下载为 Windows-1252 而不是 utf_8
【发布时间】:2020-09-01 13:48:30
【问题描述】:

你好,我有 utf_8 编码的数据,但是在导出时我在 microsoft excel 上打开它我得到了这个

当我用记事本打开时

当我以 excel 格式打开文件时,我会从原始文件 1252 windows

中获取此编码

这是我的代码

    $outputCSv = "";
        
        $someData = array(
    array('one' ,'two' ,'three'),
    array('واحد', 'اثنان', 'ثلاثة'),
    array ('اربعة', 'خمسة', 'ستة'),
    array('سبعة', 'ثمانية', 'تسعة'));

foreach ($someData as $data) {
    $outputCSv .= implode(',', $data) . "\r\n";
}
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment;filename=csvTest.csv");
header("Content-Encoding: UTF-8");
echo "\xEF\xBB\xBF"; // UTF-8 BOM  

echo $outputCSv; exit(0); 

【问题讨论】:

  • 这与 phpexcel 或 phpspreadsheet 无关,我不太明白你为什么使用 application/vnd.ms-excel mime 类型 - csv 应该是 text/csv
  • 我删除了 phpexcel 和 phpspreadsheet 标签,即使将其更改为 text/csv 仍然与 1252 windows 编码中的文件相同
  • 你试过notepad++或者vscode或者其他更高级的编辑器吗?
  • 是的,当我使用 notepad++ 或其他编辑器时,我得到了我想要的结果,但只有当我在 microsoft excel 中打开时,我才会得到错误字符

标签: php export-to-csv


【解决方案1】:

虽然我把时间浪费在挑战编码上,但我使用了输出缓冲,它就像魅力一样工作

ob_clean();
    ob_start();
      $outputCSv = "";
    
    $someData = array(
array('one' ,'two' ,'three'),
array('واحد', 'اثنان', 'ثلاثة'),
array ('اربعة', 'خمسة', 'ستة'),
array('سبعة', 'ثمانية', 'تسعة'));

foreach ($someData as $data) {
    $outputCSv .= implode(',', $data) . "\r\n";
}
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment;filename=csvTest.csv");
header("Content-Encoding: UTF-8");
echo "\xEF\xBB\xBF"; // UTF-8 BOM  

echo $outputCSv; 
 ob_end_flush();
exit(0); 

【讨论】:

    猜你喜欢
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多