这个问题相信大家都遇到过,不少人少不了为这个问题而头痛。这里牵扯到一个UTF8与BOM的问题:
当应用程序的文件使用 UTF8 编码时,在保存文件时,一定要注意 BOM 的问题。
什么是 BOM ?
UTF -8以字节为编码单元,没有字节序的问题。
而UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。
例如收到一个“奎”的Unicode编码是594E,“乙”的Unicode编码是4E59。
如果我们收到UTF-16字节流“594E”,那么这是 “奎”还是“乙”?
Unicode规范中推荐的标记字节顺序的方法是BOM。
BOM不是“Bill Of Material”的BOM表,而是Byte Order Mark。
如果文件保存时,选择了使用 BOM,那么就可能会出现 headers already sent 的问题。
因为 Web 服务器软件可能不认识 BOM,所以就把 BOM 的两个特殊字节当做字符发送给浏览器了。
这时再调用 session_start() 等函数,就会出现 headers already sent 的问题。
所以解决此问题最根本的方法就是在保存 UTF8 编码文件时,不要使用 BOM。
常用编辑器的设置方法: