PHP Streaming CSV 始终添加 UTF-8 BOM

标签 php apache utf-8 csv byte-order-mark

以下代码将“报告行”作为数组获取并使用 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;

最佳答案

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

关于PHP Streaming CSV 始终添加 UTF-8 BOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2576520/

相关文章:

java - log4j如何指定日志文件相对路径

python - 使用 nltk 计算 pandas Dataframe 中最流行的 'two words combination' 希伯来语单词

unicode - 如何将不受支持的字符加载到 Teradata Unicode 列中?

mysql - Spring MVC、MySQL 和 UTF-8

php - Codeigniter 无法加载库

php - 谷歌地图、PHP 和 MySQL : Create multiple markers on map using various options together

php/mysql 更新非常大的表的更好选择

php - 从文本文件中切片

Java:使用 Oreilly MultipartRequest servlet 发送带有附件的电子邮件

javascript - 使用网页登录apache服务器