【问题标题】:utf-8 bom and headers in php [duplicate]php中的utf-8 bom和标头[重复]
【发布时间】:2012-12-04 12:07:25
【问题描述】:

可能重复:
“Warning: Headers already sent” in PHP

当我使用 utf-8 bom 创建我的 php 文件时,header() 函数不起作用,因为 bom 字符在 http 标头之前发送。

  • 是不是说我们不应该在php源文件中使用bom?
  • 是功能还是错误?
  • 在处理 utf-8 编码的 php 源文件时,您有什么建议?

【问题讨论】:

  • 有数百个与 php 和 BOM 相关的 SO 问题 - 它们都没有为您提供答案吗?
  • @AD7six ,我找不到任何人问它是否是一个错误
  • 如果添加 BOM 会使您的脚本无法工作,那么解决方案与那个老医生笑话中的相同。 “医生,我这样做的时候很痛。” “那么,不要那样做!”

标签: php utf-8 http-headers byte-order-mark


【解决方案1】:
  • BOM 在 UTF-8 中无用。
  • 两者都不是。 PHP 正在按预期工作。您的文件包含此内容,并且 PHP 正在按预期工作,因为它首先输出打开 <?php 标记之前的所有数据:

--

<byte order mark><?php // code here

--

  • 不要使用 BOM。

【讨论】:

  • 我不确定 PHP 是否按预期工作,因为 BOM 用于控制而不是内容
  • 仅仅因为它不是一个可打印的字符并不意味着它不应该被输出。正如文档所述,any 在您的标头之前输出会导致“标头已发送”错误。如果我要创建一个仅包含从右到左控制字符的空白页面,我希望它会被打印出来。
  • 好吧,
【解决方案2】:

BOM 是发送到浏览器的实际数据,但是浏览器会忽略它,一旦发送,您将无法发送标头,除非您使用输出缓冲。一般不使用BOM。如果您使用的文本编辑器需要 BOM,则将编辑器更改为不那么过时的东西。

【讨论】:

    猜你喜欢
    • 2014-03-10
    • 2011-07-19
    • 2013-06-29
    • 2021-08-01
    • 2015-04-19
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多