使用PHP 5.4发送标头输出过早的问题

时间:2014-02-10 17:48:15

标签: php

我最近遇到了很多5.4+的问题,其中一个是重定向无法正常工作,错误如#34;标题已经发送"。

我注意到的是,如果我将文件保存为" UTF-8没有BOM"问题消失了(我想有一些我没有真正看到的问题)。

我如何解决这个问题,所以我不必将每个文件转换为" UTF-8而没有BOM"?

谢谢!

3 个答案:

答案 0 :(得分:1)

BOM(字节顺序标记)由3个字节(0xEF 0xBB 0xBF)组成,表示生成它的系统的字节顺序(即Intel / x86兼容处理器上的little-endian,几乎任何东西上的big-endian)其他)。 UTF-8不需要它,是的,你不应该把它放在你的文件中。

问题在于,由于BOM位于字符串的开头(因此是文件的开头),因此它会在您拥有的任何开放<?php之前插入,因此会被发送到浏览器。

我不确定为什么PHP 5.4不会忽略它以及之前的版本应该如此,但如果它是UTF-8,你根本就不应该把它放在你的文件中。

答案 1 :(得分:0)

https://bugs.php.net/bug.php?id=42312&edit=1可以为您提供一些信息和交叉引用(请参阅注释),但看起来您只需要解决它(尽管其中一位评论者建议使用可能使生活更轻松的编译选项)。

答案 2 :(得分:-1)

当您尝试执行标题重定向时,通常会出现

“已发送的标题”

header("Location: some URL");

在你输出一些html后。

要解决此问题,请在调用get_header()(wordpress)或包含header.php(CMS)之前执行所有php检查和标头重定向