带有 UTF-8 问题的 PHP fputcsv

标签 php mysql utf-8 export-to-excel fputcsv

我试图让我的客户在 Excel 中查看一些 MySQL 数据。我使用了 PHP 的 fputcsv() 函数,例如:

public function generate() {
   setlocale(LC_ALL, 'ko_KR.UTF8');

   $this->filename = date("YmdHis");
   $create = $this->directory."Report".$this->filename.".csv";

   $f = fopen("$create","w") or die("can't open file");
   fwrite($f, "\xEF\xBB\xBF");

   $i = 1;
   $length = count($this->inputarray[0]);

   fwrite($f, $this->headers."\n");

   // print column titles
   foreach($this->inputarray[0] as $key=>$value) {
    $delimiter = ($i == $length) ? "\n\n" : ",";
    fwrite($f, $key.$delimiter);
    $i++;
   }

   // print actual rows
   foreach($this->inputarray as $row) {
    fputcsv($f, $row);
   }
   fclose($f);
  } 

我的客户是韩国人,MySQL 数据库的很大一部分包含 utf8_unicode_ci 中的值。通过使用上述功能,我成功​​地生成了一个 CSV 文件,其中包含正确编码的数据,可以在我的机器上的 Excel 中正常打开(英文的 Win7),但是当我在客户端计算机(韩文的 Win7)上的 Excel 中打开文件时,字符又坏了。我尝试取出 header (\xEF\xBB\xBF),并注释掉 setlocale,但无济于事。

你能帮我解决这个问题吗?

最佳答案

如果,如您所说,您的 CSV 文件有“正确编码的数据” - 即它包含一个有效的 UTF-8 字节流,并假设该文件的字节流在您的客户端站点相同(例如,文件传输问题未在传输过程中损坏)那么这听起来像是客户端计算机上的 Excel 无法正确解释 UTF-8 的问题。这可能是因为它不受支持或导入时需要选择某些选项以指示编码。因此,您可以尝试以不同的编码生成文件(使用 mb_convert_encodingiconv)。

如果您让您的客户导出包含韩文字符的 CSV,那么您将能够查看该文件并确定正在生成的编码。然后您应该尝试使用该编码。

关于带有 UTF-8 问题的 PHP fputcsv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4824202/

相关文章:

php - 将 JSON 代码附加到从 MySQL 和 PHP 创建的 JSON

php+MYSQL+一次获取n行

php - AWS 数据库结构 - MySQL 和 DynamoDB

python - 在 python 中打印 unicode 字符串

c# - 写入TextWriter时如何输出字节顺序标记?

php - UTF-8贯穿始终

php - Ubuntu 14.04、Apache 2.4.7、Phpbrew 和 PHP7 仅将 PHP 文件呈现为纯文本

php - 用户在表单中插入日期

javascript - 如何增加 dhtmlxgantt 图表的日期

php - php 中是否可以采用 sqlite 数据库和 mysql 数据库并相互运行查询?