在使用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表开始。