编码问题导致的 Headers already sent 错误

前些日子同学找我来说我帮他做的网站的注册功能失效了。我看了一下发现是由于301跳转失败导致的。 查看日志错误内容为:

Warning: Cannot modify header information - headers already sent by (output started at…

但看了一下源代码却没有发现问题,在本机运行也一切正常。<?php 前面和 ?> 后面都没有字符。

百思不得其解,使用W3C的HTML校验却发现了:

Byte-Order Mark found in UTF-8 File.

才发现是由于他们在部署网站改配置时用记事本编辑保存成了UTF-8 with BOM导致的问题。解决方法也很简单,改成without BOM就好了。

由此可见编辑器对Web开发有多重要(我一直在用Coda,很顺手)。

顺便提示一下PHP开发好习惯,就是只写 <?php 不写 ?>,原因就是谁也不能保证啥时手贱在 ?> 后面打些什么东西导致Headers already sent错误(当然如果你把PHP当模板语言用就不能不用 ?> 了)。

Tags: ,

Updated: