下面的代码得到一个“报告”线作为阵列和用途fputcsv将其变换分析成CSV。除了一个事实,一切是伟大的工作,不管字符集我使用的,它是在文件的开头放一个UTF-8 BOM。这是非常讨厌的,因为A)我指定ISO和B)我们有很多使用的工具,展示了UTF-8 BOM作为垃圾字符的用户。

我甚至试过把结果写入字符串,剥离UTF-8 BOM,然后echo'ing出来,并仍然得到它。有没有可能是问题所在与Apache? 如果我改变的fopen它就好写它没有UTF-8 BOM本地文件。

header("Content-type: text/csv; charset=iso-8859-1");
header("Cache-Control: no-store, no-cache");
header("Content-Disposition: attachment; filename=\"report.csv\"");

$outstream = fopen("php://output",'w');

for($i = 0; $i < $report->rowCount; $i++) {
    fputcsv($outstream, $report->getTaxMatrixLineValues($i), ',', '"');
}
fclose($outstream);

exit;
有帮助吗?

解决方案

我的猜测是,你的PHP源代码文件有一个BOM,并且启用了PHP的输出缓冲。

其他提示

我不知道这样能否解决您的问题,但你尝试过使用印刷和破灭功能,做同样的事情?

header("Content-type: text/csv; charset=iso-8859-1");
header("Cache-Control: no-store, no-cache");
header("Content-Disposition: attachment; filename=\"report.csv\"");

for($i = 0; $i < $report->rowCount; $i++) {
    print(implode(',',$report->getTaxMatrixLineValues($i)));
}

这不是测试,但很明显的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top