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

用PHP中的BOM将字符串编码为UTF-8,php,utf-8,byte-order-mark,Php,Utf 8,Byte Order Mark,使用utf8\U编码时,如何强制PHP添加BOM 以下是我正在尝试做的: $zip->addFromString($filename, utf8_encode($xml)); 不幸的是(对我来说),结果在开始时没有BOM标记 您是否尝试过自己添加一个 似乎是0xEF 0xBB 0xBF,因此您可以在转换为UTF-8后将其附加到字符串 $utf8_with_bom = chr(239) . chr(187) . chr(191) . $utf8_string; 不过要小心。需要ISO-8

使用utf8\U编码时,如何强制PHP添加BOM

以下是我正在尝试做的:

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

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

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

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

$utf8_with_bom = chr(239) . chr(187) . chr(191) . $utf8_string;
不过要小心。需要ISO-8859-1字符串。如果您正在使用XML,请确保XML尚未进行UTF-8编码。文档中的注释表明该函数以各种有趣的方式被破坏,因此除非您知道需要它,否则不应该随意使用它

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

此外,维基百科的链接文章说:

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


您可能不需要从BOM表开始。我遇到一个问题,Excel在没有BOM的情况下无法正确打开我的UTF-8 CSV,因此可能不需要它,但它肯定会有所不同。您可以通过执行
chr(0xEF).chr(0xBB).chr(0xBF)使数字看起来不那么“神奇”
-通过这种方式,您可以看到它是十六进制的,并从中更好地理解它是BOM。如果您使用一些旧编辑器,例如EditPlus,“在文件中查找”功能只能搜索和识别带有utf8+BOM编码的外来字符的文件。请记住,要使.CSV文件在Excel for Mac中工作,UTF8 BOM和编码不起作用-您需要将数据转换为UTF16-LE并添加UTF16-LE BOM-我向您保证我的第一个孩子。非常感谢。