PHP Streaming CSV始终添加UTF-8 BOM

ash*_*exm 2 php csv apache byte-order-mark utf-8

以下代码将"报告行"作为数组获取,并使用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;
Run Code Online (Sandbox Code Playgroud)

goa*_*oat 7

我的猜测是你的php源代码文件有一个BOM,你启用了php的输出缓冲.