2

以下代码将“报告行”作为数组获取,并使用 fputcsv 将其转换为 CSV。一切都很好,除了不管我使用什么字符集,它都会在文件的开头放置一个 UTF-8 bom。这非常烦人,因为 A)我指定 iso 和 B)我们有很多用户使用将 UTF-8 bom 显示为垃圾字符的工具。

我什至尝试将结果写入字符串,剥离 UTF-8 BOM,然后将其回显并仍然得到它。问题可能出在 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;
4

2 回答 2

8

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

于 2010-04-05T01:57:12.037 回答
0

我不知道这是否能解决您的问题,但您是否尝试过使用 print 和 implode 函数来做同样的事情?

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)));
}

这没有经过测试,但很明显。

于 2010-04-05T19:14:26.300 回答