我需要提供一个纯文本文件供下载。文本文件需要采用 UTF-8 编码,并且需要存在 BOM。我将我的 php 文件保存为不带 BOM 的 UTF-8 并发送以下 header :
header('HTTP/1.1 200 OK');
header('Content-Type: text/plain; charset=utf-8');
header('Content-Disposition: attachment; filename="test.txt"');
我保存没有 BOM 的脚本,因为它会干扰发送 header 。 所以我尝试通过以下方式手动放置 BOM:
echo chr(239).chr(187).chr(191);
然后我放出我的文字。如果没有手动 BOM,像 Notepad++ 这样的编辑器将识别文件为 ANSI 编码,如果使用假定的手动 BOM,它将被识别为 UTF-8,但将包含以下字符:

一开始。所以我假设通过启发式方法检测到它是 UTF-8,而我的手动 BOM 是错误的。
我该怎么做才正确?
编辑: 要求的十六进制内容。我只是将文本设为“SOME TEXT”,然后得到:
C3 AF C2 BB C2 BF 53 4F 4D 45 20 54 45 58 54
将“SOME TEXT”保存为带 BOM 的 UTF-8 格式:
EF BB BF 53 4F 4D 45 20 54 45 58 54
最佳答案
您看到的是将 BOM 的各个字节解释为 IOS-8859-1,然后将结果编码为 UTF-8 的结果。至于为什么会发生这种情况,我怀疑 chr()
函数 - 尝试改用 char 文字,即
echo "\xEF\xBB\xBF";
关于PHP:如何将带 BOM 的 UTF-8 文本/纯文本内容输出以供下载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13056849/