PHP流CSV总是添加UTF-8 BOM
-
24-09-2019 - |
题
下面的代码得到一个“报告”线作为阵列和用途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)));
}
这不是测试,但很明显的。
不隶属于 StackOverflow