将 BOM 添加到 PHP 输出流
Adding BOM to PHP output stream
我想将一些带有井号的数据导出到 CSV 文件,并添加 BOM 以正确表示井号。当我写入 php 输出流 php://output
时,我遇到了 BOM 在某处被忽略的情况,因此在文件中没有这 3 个字节。有趣的是,如果您复制 BOM 字符串(类似于 \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/
似乎这就是 UTF-8 解码算法在浏览器中的工作方式,参见
我想将一些带有井号的数据导出到 CSV 文件,并添加 BOM 以正确表示井号。当我写入 php 输出流 php://output
时,我遇到了 BOM 在某处被忽略的情况,因此在文件中没有这 3 个字节。有趣的是,如果您复制 BOM 字符串(类似于 \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/
似乎这就是 UTF-8 解码算法在浏览器中的工作方式,参见