包含带有BOM的UTF-8文件时出现奇怪错误

时间:2013-05-22 18:54:26

标签: php utf-8

我有这个非常奇怪的问题。

每当我尝试使用“UTF-8”包含文件时,运行时都会出错。即使脚本完全运行并返回正确的文本。

(我做ini_set('default_charset', 'utf-8');

看看这个例子..代码是这样的:

当我有这样的代码时:

include_once $fn;
echo json_encode("ALL IS FINE");
die();

ajax如何回应解释它: (作为一个错误,但响应文本仍然相同,所以它实际上始终是正确的文本,并且脚本完全运行..) enter image description here

当我有这样的代码时:

echo json_encode("ALL IS FINE");
die();
include_once $fn;

ajax如何回应解释它: enter image description here

如果我在Notepad ++中使用“ANSI as UTF-8”,我可以摆脱错误,这基本上意味着没有BOM的UTF-8。但是我想在utf8中使用它。

1 个答案:

答案 0 :(得分:1)

在php中使用带有BOM的utf8,你只会遇到问题。 在您的情况下,您在ajax响应中实际获得的内容如下所示:

BOM"ALL IS FINE"

BOM不在引号之内,因此javascript无法对其进行解码,因为它不再是有效的json。

此外,当使用一些现代的PHP框架时,你会遇到BOM的问题。他们中的大多数都使用输出缓冲来操纵内容。在这种情况下,BOM最常见的错误是

Warning: Cannot modify header information - headers already sent