utf 8 -在PHP中用BOM编码字符串为utf -8


utf 8 - Encoding a string as UTF-8 with BOM in PHP

在使用utf8_encode时如何强制PHP添加BOM ?

我要做的是:

$zip->addFromString($filename, utf8_encode($xml));

不幸的是(对我来说),结果在开头没有BOM标记。

你试过自己添加一个吗?

UTF-8 BOM似乎是0xEF 0xBB 0xBF,因此您可以在转换为UTF-8后将其附加到字符串

$utf8_with_bom = chr(239) . chr(187) . chr(191) . $utf8_string;

不过要小心。utf8_encode需要一个ISO-8859-1的字符串。如果您正在使用XML,请确保XML没有已经进行了UTF-8编码。文档上的注释表明该函数以各种有趣的方式被破坏,所以除非你知道需要它,否则你不应该乱扔它。

请记住,PHP字符串只是愚蠢的、未知的字节。它们没有附加的字符集,所以如果字符串中的数据已经是UTF-8,则不需要运行转换。

同时,链接的维基百科文章是这样说的:

虽然Unicode标准允许UTF-8的BOM,但并不要求或推荐它。字节顺序在UTF-8中没有意义,因此BOM仅用于标识文本流或文件为UTF-8,或者它是从具有BOM的其他格式转换而来的。

您可能不需要从BOM表开始。