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

Run Code Online (Sandbox Code Playgroud)
在开始时.所以我假设通过启发式方法检测到它是UTF-8,我的手册BOM是错误的.
我该怎么做?
编辑: HEX内容按要求.我简单地将文字写成"SOME TEXT",然后我得到:
C3 AF C2 BB C2 BF 53 4F 4D 45 20 54 45 58 54
Run Code Online (Sandbox Code Playgroud)
将"SOME TEXT"保存为带有BOM的UTF-8产量:
EF BB BF 53 4F 4D 45 20 54 45 58 54
Run Code Online (Sandbox Code Playgroud)
您看到的是将 BOM 的各个字节解释为 IOS-8859-1,然后将结果编码为 UTF-8 的结果。至于为什么会发生这种情况,我怀疑该chr()函数 - 尝试使用 char 文字代替,即
echo "\xEF\xBB\xBF";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14971 次 |
| 最近记录: |