将BOM添加到PHP输出流

时间:2018-02-20 09:43:21

标签: php csv outputstream byte-order-mark

我想将带有井号的一些数据导出到CSV文件,并添加BOM以正确表示磅。当我写到php输出流php://output时,我遇到了这种情况,BOM被忽略了,所以在文件中没有这3个字节。有趣的是,如果您复制BOM字符串(类似\xef\xbb\xbf\xef\xbb\xbf),前三个字节将被忽略,而在文件中将只有最后3个字节。 这仅用于在输出流中写入。当我尝试在真实文件中写入时,所有工作都按预期进行。

编辑: 澄清我的问题。也许有人知道它为什么这么有效?如何在没有拐杖的情况下解决问题,例如重复的BOM字符串

编辑: 我正在使用Symfony 2.8 StreamedResponse。所以代码就像

一样
$f = fopen('php://output', 'r+');
fwrite($f, "\xef\xbb\xbf\xef\xbb\xbf"); // only 3 bytes will exists
// other code. fputcsv(...) .. fflush($f)

我正在使用https://hexed.it/

查看的文件

1 个答案:

答案 0 :(得分:1)

这似乎是UTF-8解码算法在浏览器中的工作原理,请参阅https://stackoverflow.com/a/42717677