在 PHP 中使用 BOM 将字符串编码为 UTF-8

2022-08-30 16:52:22

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

以下是我正在尝试执行的操作:

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

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


答案 1

你有没有试过自己添加一个?

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踏步舞。


答案 2

推荐