【问题标题】:Codeigniter's csv_from_result() not working with UTF-8 characters?Codeigniter 的 csv_from_result() 不适用于 UTF-8 字符?
【发布时间】:2012-08-02 15:05:03
【问题描述】:

我有一些 Cyrilic 数据,我想用 Codeigniter 将其导出为 .csv 文件。问题是 csv_from_result() 方法弄乱了这些字符。

$this->load->dbutil();
$delimiter = ",";
$newline = "\r\n";

$report_result =  $this->data_model->get_data_result();
$data['csv']    = $this->dbutil->csv_from_result($report_result, $delimiter, $newline);

在我看来,我有:

<?php
header("Content-type: application/csv-tab-delimited-table; charset=utf-8" );
header("Content-Disposition: attachment; filename=csvdata.csv" );
header("Content-Transfer-Encoding: binary" );
  echo $csv; 
?> 

输出文件,包含如下混乱的字符:

ТеÑÑ‚ пиÑмо","54","Референц

【问题讨论】:

  • 你为什么使用“application/csv-tab-delimited-table”而不是“application/csv”?
  • 我都试过了......我在哪里看到它,所以我决定试一试,但它不起作用
  • 检查您从模型中获得的结果,并在不使用“Content-Transfer-Encoding”标头的情况下进行尝试。我认为“Content-type: application/csv”和“Content-Disposition: attachment; filename=file.csv”就足够了。
  • csv_from_result() 的结果是乱码,但是如果我例如使用 $result->result() 数据就可以了。所以它必须是 csv_from_result() 函数
  • 在加载视图之前添加它会发生什么 $data['csv'] = mb_convert_encoding($data['csv'], 'UTF-8'); ?

标签: php codeigniter csv export


【解决方案1】:

来自ci的csv_from_result生成没有BOM的utf-8,可以找到区别here 所以你现在需要做的就是将“utf-8 without BOM”转换为“utf-8”,你可以用下面的代码来完成。

$this->load->dbutil();
$delimiter = ",";
$newline = "\r\n";

$report_result =  $this->data_model->get_data_result();
$CSV_data      = $this->dbutil->csv_from_result($report_result, $delimiter, $newline);
$CSV_data = chr(239) . chr(187) . chr(191) .$CSV_data;
$data['csv'] = $CSV_data;

【讨论】:

    【解决方案2】:

    我最终使用了 PHPExcel for Codeigniter 。这就像一个魅力。

    【讨论】:

      【解决方案3】:

      试试这个:

      $this->load->dbutil();
      $query = $this->db->query($sql);
      $delimiter = ",";
      $newline = "\r\n";
      
      header ("Content-disposition: attachment; filename=csvoutput_" . time() . ".csv") ;
      echo mb_convert_encoding($this->dbutil->csv_from_result($query, $delimiter, $newline), "ISO-8859-1", "UTF-8");
      

      【讨论】:

      • 不起作用,它将乱码转换为问号(?)
      • @GladToHelp 将 from 字段更改为另一种编码。我的数据库是 iso-8859-9,所以我将 iso-8859-1 切换到 iso-8859-9 工作正常。
      猜你喜欢
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-05
      相关资源
      最近更新 更多