关于utf-8编码问题引起的session_start()错误

字体大小: 中小 标准 ->行高大小: 标准
采用默认的gb2312编码时,兼容Ansi编码,文件头部无任何附加信息,此时session_start()可以正常工作。
采用utf编码时,大部分编辑器都会在在文件头部附加一个BOM块,我的EditPlus附加的是FF FE,用16进制编辑器
可以很清楚的看到。这样,当调用session_start()时,实际上已经向浏览器输出两个字节,只不过是不可见字符浏
览器中出现如下警告:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at ......................

解决方法:
1、手动去掉BOM块,可以在16进制编辑器如UltraEdit中编辑,或者采用编辑器自带的功能,好的编辑器一般提
供选择是否去除BOM块。
2、自己编写脚本更正,这要针对不同的编辑器,BOM头定义:
UTF-8 EF BB BF 
UTF-16 Big Endian FE FF 
UTF-16 Little Endian FF FE 
UTF-32 Big Endian 00 00 FE FF 
UTF-32 Little Endian FF FE 00 00
只要删除文件头部的BOM快就可以,示例代码:

[php]
$str=file_get_contents('session.php');
//删除BOM头部两个字节
$str=substr($line,2);
file_put_contents('session.php',$str);
[/php]

此文章由 www.phpgz.com 收集整理 ,地址为: http://www.phpgz.com/htmls/29980.html

大屏阅读,大屏评论.