wangmingsky(磨碎的沙子)说的对,是这个问题,可以判断一下 if (!headers_sent()) { header('Location: http://www.example.com/'); exit; }utf8格式这个时候是很麻烦,非常容易遇到这种问题
不是那个问题。 不用多说,我们都知道header前面不能有任何输出。用utf-8格式的页面,header就会出现这样的问题,我google了一下,并不是我们编写的错误,而是utf-8自己的问题,偷偷地输出什么三个字符,我们看不到,我不知道怎么解决这样的问题。请前辈教教。例子: a.php:<?php header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); ?>就三行,header之前我们没写什么输出吧?你保存成gb2312. ok,没问题。你保存成utf-8,执行,报错: Warning: Cannot modify header information - headers already sent by (output started at E:\wwwroot\gavin\org\utf8\p.php:1) in E:\wwwroot\gavin\org\utf8\p.php on line 2
location='main.php';
</script>
if (!headers_sent()) {
header('Location: http://www.example.com/');
exit;
}utf8格式这个时候是很麻烦,非常容易遇到这种问题
不用多说,我们都知道header前面不能有任何输出。用utf-8格式的页面,header就会出现这样的问题,我google了一下,并不是我们编写的错误,而是utf-8自己的问题,偷偷地输出什么三个字符,我们看不到,我不知道怎么解决这样的问题。请前辈教教。例子:
a.php:<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
?>就三行,header之前我们没写什么输出吧?你保存成gb2312. ok,没问题。你保存成utf-8,执行,报错:
Warning: Cannot modify header information - headers already sent by (output started at E:\wwwroot\gavin\org\utf8\p.php:1) in E:\wwwroot\gavin\org\utf8\p.php on line 2
Apache 2.0.52 + PHP 5.0.2
BOM占了文件的前三个字节,普通的文本编辑器是看不到的,用winhex打开可以看到前3个字节的bom标记。
php在这点处理上有些问题,不能正确识别BOM。asp就可以还有,为什么会造成BOM,有些编辑器在保存的时候默认是添加BOM的,有些则不是。
win2k下的记事本默认是添加的
解决方法正如cloudchen所说。在editplus下也有这个选项:
解决方法一样:打开editplus->参数选择->文件,将“不添加字节顺序标记到UTF-8文件”前面的勾选上,确定。然后打开你出错的文件,保存一下,就去掉bom了。
ultraedit也有此类选项。DW上如cloudchen所说。参详贴子 http://community.csdn.net/Expert/topic/3645/3645409.xml?temp=.8103296
特别写了个实践总结,地址在 http://www.gavins.org/weblog/show.php?id=110 。需要的朋友可以去看一下。如果有错误或者疏漏,请指出!谢谢