25

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

这是我想做的事情:

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

不幸的是(对我而言),结果开头不会有 BOM 标记。

4

1 回答 1

76

您是否尝试过自己添加一个?

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

$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 节拍而烦恼。

于 2011-04-09T00:26:52.493 回答