PHP CSV导出下载为Windows-1252而不是utf_8

问题描述

你好,我有utf_8编码的数据,但是在导出时,我在microsoft excel上将其打开

Blockquote

在这里用记事本打开时

enter image description here

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

获取此编码

这是我的代码

    $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); 

解决方法

虽然我浪费时间挑战编码,但我使用了输出缓冲,它的工作原理很像魅力

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);