mb_convert_encoding如何工作?

时间:2011-07-07 12:04:15

标签: php excel utf-8 ascii mb-convert-encoding

我在将UTF-8数据导出到Excel时遇到了问题,但现在没关系,因为我发现了这个:

Microsoft Excel mangles Diacritics in .csv files?

看看这一行:

echo chr(255) . chr(254) . mb_convert_encoding($csv, 'UTF-16LE', 'UTF-8');

当我删除chr(255)时。 chr(254)一开始Excel无法正常显示UTF-8数据,所以浏览器无法显示。

这当然不是问题,我只想知道,为什么那些chr(255)和chr(254)是必不可少的。

2 个答案:

答案 0 :(得分:1)

Excel和PHP对BOM(字节顺序标记)的看法不同,以指示此字符编码。使用chr(255).chr(254),您可以手动强制输出为Excel所需的输出。 见http://nl.wikipedia.org/wiki/Endianness

答案 1 :(得分:1)

似乎Excel需要Byte Order Mark (BOM)。 BOM始终位于文件的开头,FFFEFEFF。它描述了多字节字符的单独字节出现在哪个顺序(让我们说“向前”或“向后”)。通常强烈建议省略它,但看起来,excel使用它来确定文件编码。