2012-08-02 24 views
1

我有一些數據在Cyrilic中,我想用Codeigniter將其導出爲.csv文件。問題是,方法csv_from_result()會混淆這些字符。Codeigniter的csv_from_result()不能使用UTF-8字符?

$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","Референц 
+0

爲什麼使用「application/csv-tab-delimited-table」而不是「application/csv」? – user1190992 2012-08-02 15:12:50

+0

我嘗試了兩種方法...我在某處看到它,所以我決定嘗試一下,但它不起作用 – 2012-08-02 15:14:50

+0

檢查您從模型中獲得的結果,並在不使用「Content-Transfer-Encoding」頭。我認爲「Content-type:application/csv」和「Content-Disposition:attachment; filename = file.csv」就足夠了。 – user1190992 2012-08-02 15:21:29

回答

0

試試這個:

$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"); 
+0

不起作用,它將亂碼轉換爲問號(?) – 2012-08-07 07:29:21

+0

@GladToHelp將from字段更改爲另一個編碼。我的數據庫是iso-8859-9,所以我已將iso-8859-1更改爲iso-8859-9,運行良好。 – Arda 2014-10-16 09:30:15

2

csv_from_result產生UTF-8無BOM,你可以找到差異here 所以你現在需要做的是轉換「UTF-8無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; 
+0

非常感謝,你救了我的命:) – 2016-02-28 19:12:50