我想将一些带有井号的数据导出到CSV文件,并添加BOM以正确表示井号。我遇到过这样的情况,当我写到php输出流的时候,php://output的BOM被忽略了,所以在文件中没有这3个字节。有趣的事实是,如果你复制物料清单字符串(如\xef\xbb\xbf\xef\xbb\xbf),前3个字节将被忽略,而在文件中将只有最后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/检查的文件
发布于 2018-02-22 00:58:18
这似乎就是UTF-8解码算法在浏览器中的工作原理,请参阅https://stackoverflow.com/a/42717677
https://stackoverflow.com/questions/48882116
复制相似问题