我使用yii驱动的应用程序。我的目标是编写控制器操作,使用Yii 1.1: csvexport
和CHttpRequest::sendFile
我的代码:
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打开生成的文件,我会看到类似的内容:
文件编码存在一些问题...我打开了notepad ++并将编码更改为UTF-8而没有BOM,现在文件看起来不错(语言:Ru):
测试了此修复但未取得成功的结果:
header('Content-type: text/csv; charset=UTF-8'); // no effect
Yii::app()->getRequest()->sendFile(
$filename,
$output,
"text/csv; charset=UTF-8", // no effect
true
);
如何在yii发送文件操作后立即实现此目的?
答案 0 :(得分: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 :(得分:0)
默认设置参数,Excel for Windows使用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.