2014-07-16 86 views
2

我使用yii驅動的應用程序。我的目標是寫控制器操作使用Yii 1.1: csvexportCHttpRequest::sendFileyii發送csv文件字符集

我的代碼是什麼導出一些數據從MongoDB中到CSV文件:

public function actionCatalogDataExport($catalog_id) 
{ 
    // prepare all needed variables here 
    $data = ..., $headers = ..., $filename = ...  

    Yii::import('ext.csv.ECSVExport'); 
    $csv = new ECSVExport($data); 
    $output = $csv->setHeaders($headers)->setDelimiter(',')->toCSV(); 
    Yii::app()->getRequest()->sendFile($filename, $output, "text/csv", true); 
} 

這個腳本工作正常,但如果我打開通過Excel中產生的文件我看到類似即:

enter image description here

有一些問題,文件編碼...我打開記事本+ +和改變編碼成UTF-8無BOM,現在文件看起來不錯(語言:茹):

enter image description here

測試了這個補丁,但沒有成功,結果:

header('Content-type: text/csv; charset=UTF-8'); // no effect 

Yii::app()->getRequest()->sendFile(
    $filename, 
    $output, 
    "text/csv; charset=UTF-8", // no effect 
    true 
); 

我怎麼能馬上做到這一點後,警予發的文件操作?

回答

0

默認情況下,安裝參數用於Windows的Excel打開使用Windows-1251編碼的csv文件。如果我需要用這個編碼,使正確的數據值,我必須使用iconv

foreach($data as $key => &$value) { 
    $value = iconv('UTF-8', 'windows-1251', $value); 
} 

// send file to user... 
// ...and it works as I need. 
1

嘗試添加編碼開始喜歡這個CSV文件的:

$encode = "\xEF\xBB\xBF"; // UTF-8 BOM 
$content = $encode . $csv->toCSV(); 

//var_dump($content); 
Yii::app()->getRequest()->sendFile($filename, $content, "text/csv; charset=UTF-8", false); 
+1

超。簡單的方法。感謝名單! – dimka3210

+0

@ dimka3210是的,這很容易解決問題 – TotPeRo