【问题标题】:Extra undefined character in the beginning of response [duplicate]响应开头的额外未定义字符[重复]
【发布时间】:2015-12-12 18:04:21
【问题描述】:

这阻止了我使用 JSON,也阻止了使用 React 或 Ember。使用 AJAX 向服务器发送请求时,我得到一个额外的未定义 unicode 字符,这会导致解析器错误,因为它会破坏 JSON。

我已经检查了我拥有的每个 php 文件是否有额外的 throw 或 echo 或 print 或任何其他会打印某些东西但什么都没有的函数。这不仅限于 JSON,但在等待文本时,这不会成为问题。但使用 JSON 时,它会被解析并且会中断。

这里有什么可能干扰的吗?

要了解更多信息,请查看此内容。红点代表一个未定义的字符。

PS。另外,我不会关闭任何带有 ?> 标记的 PHP 文件,并将开始标记放在每个文件的开头。

PPS。我正在使用 Sublime Text 3,但我认为它与 BOM 没有任何关系。此外,chrome 和 firefox 中的红点代表一个不可打印的特殊 unicode 字符,它是从服务器发送的,服务器端只有 PHP。

【问题讨论】:

  • ?> 结束标签后的空行?尝试删除结束标签
  • 您能否发布一个示例,说明您的期望和得到的结果? ..
  • 你的
  • 也许您使用记事本保存了文件?正如@Paul Corvella 所说,这可能是一个 BOM。确保您的文件在没有 BOM 的情况下转换为 UTF-8
  • @unxp 是对的.. 这个问题之前已经提出过.. 看看这个帖子:stackoverflow.com/questions/23511275/…

标签: php


【解决方案1】:

正如我在上面的 cmets 中发布的链接中所回答的那样。

“Windows 记事本将 BOM 信息添加到 UTF-8 文件(即文件开头的 FFFE 或 FEFF),这将解释此行为。例如,在 Notepad++ 中,您可以使用“格式”阻止 UTF-8 包含 BOM 信息“菜单”


确保包含的 php 文件也检查了 BOM

使用this command 搜索和删除文件中的 BOM!:

find . -type f -exec sed '1s/^\xEF\xBB\xBF//' -i.bak {} \; -exec rm {}.bak \;

【讨论】:

  • 感谢您的回答。但我在 Linux Ubuntu 上使用 Sublime Text 3,默认情况下它使用没有 BOM 的 UTF-8。
  • @MahdiPOnline 这是真的。你有没有在任何时候用另一个编辑器打开文件,它可能已经用 BOM 将它打开为 UTF-8,因此用 BOM 保存它,从而导致 Sublime Text 3 认为它需要在将来用 BOM 保存它.您在回复中是否仍然看到相同的 BOM 字符?
  • 我在 ST3 中没有 BOM 选项再次保存了所有文件,但仍然出现错误。我确定这不是问题。反正有没有看看 echo 试图输出什么?
  • @MahdiPOnline 你搜索过所有文件(假设字符来自其他文件)。你可以看看这个关于如何搜索 BOM 的帖子:stackoverflow.com/questions/204765/…
  • 如果您在生成响应的 php 文件中包含其他 php 文件,并且这些文件在没有 BOM 的情况下不会保存,它们(它)可能是您在响应中看到 BOM 的原因.. .看看这个有类似问题的线程:stackoverflow.com/questions/7512474/…
猜你喜欢
  • 1970-01-01
  • 2016-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-13
  • 2023-03-05
  • 2023-03-27
  • 2011-06-16
相关资源
最近更新 更多