一个很常见的错误:在使用setcookie()
时经常会遇到的,就是cannot modify header
information
- headers already sent by....
错误,可是确实没有在setcookie前输出任何内容,如果你使用的是UTF-8编码,那么这个错误的原因多半就是因为编码了,因为PHP4,5都不能识别UTF-8编码中的BOM,所以你一定要把文件保存成无BOM格式(可以使用notepad++等工具转换一下)。
那么BOM到底是何方神圣呢?要他有什么用?
Unicode
规范中有一个
BOM
的概念。
BOM
——
Byte Order Mark
,就是字节序标记。在这里找到一段关于
BOM
的说明:
在
UCS
编码中有一个叫做
"ZERO WIDTH NO-BREAK SPACE"
的字符,它的编码是
FEFF
。而
FFFE
在
UCS
中是不存在的字符,所以不应该出现在实际传输中。
UCS
规范建议我们在传输字节流前,先传输字符
"ZERO WIDTH NO-BREAK SPACE"
。这样如果接收者收到
FEFF
,就表明这个字节流是
Big-Endian
的;如果收到
FFFE
,就表明这个字节流是
Little-Endian
的。因此字符
"ZERO WIDTH NO-BREAK SPACE"
又被称作
BOM
。
U
TF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。
问题是,BOM虽然在编辑器中不显示,但是会产生输出,这就是
headers already sent by....
产生的原因了。
可是不用BOM又有一些问题,因为某些比较老的浏览器(如IE6)如果没有BOM他又识别不了,会产生明明有内容页面却一片空白的问题,我的解决办法是将setcookie()
等需要在输出前调用的函数及调用这个函数之前的所有代码放在一个外部文件中,保存为无BOM格式,而网页的主体保存为正常格式,并在第一行引用这个外部文件,这样就解决了这个问题。
分享到:
相关推荐
php 字符编码转换类,支持ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom 互相转换。
NULL 博文链接:https://snowelf.iteye.com/blog/786400
一、介绍 UTF-8 是一种在web应用中经常使用的一种 Unicode 字符的编码方式,使用 UTF-8 的好处在于它是一种变长的编码方式,对于 ANSII 码编码长度为1个字节,这样的话在传输大量 ASCII 字符集的网页时,可以大量...
如何解决BOM:先放在服务器可执行目录下,使用 浏览器http://服务器ip/存放路径/bom.php来 访问,填写实际路径执行后可得到存在有BOM的PHP文件,然后再用notepad++打开,在菜单选“格式”->“转为UTF-8无BOM..”即可. ...
php检测文件夹下有含BOM的UTF-8的文件列表
UTF-8不需要BOM来表明字节顺序,但可以...字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。 Windows就是使用BOM来标记文本文件的编码方式的
前次一次工程开发,有...本压缩包附带GB/BIG/UTF-8文件编码批量转换工具(文件名:GB2UTF81.exe) 这个工具很好很强大 还有一个bom批量检测清除工具,php版本的。只可惜只支持当前目录。不支持子目录(文件名:bom.php)
今天在CSDN看到一个php输出空白隐形字符65279的问题,在网上找了下,发下这个65279字符是php用来标记文件是utf-8编码的,输出的时候会一起输出到客户端,导致客户端如果使用ajax得到返回值时,无法匹配字符串。...
PHP页面转UTF-8编码问题 1.在代码开始出加入一行: header(“Content-Type: text/html;charset=utf-8”); 2.PHP文件编码问题 点击编辑器的菜单:“文件”->“另存为”,可以看到当前文件的编码,确保文件编码为:...
BOM信息是文件开头的一串隐藏的字符,用于让某些编辑器识别这是个UTF-8编码的文件。但PHP在读取文件时会把这些字符读出,从而形成了文件 开头含有一些无法识别的字符的问题。 比如用UTF-8格式保存的生成图片的PHP...
一.HTML页面转UTF-8编码问题 1.在head后,title前加入一行: &... 3.HTML文件头BOM问题: 将文件从其他的编码转换成UTF-8编码时,有时候会在文件的最开始加上一个BOM标签, 在个BOM标签可能会导致浏览器在显示中文的时
'* BIG5 进行 UTF-8 编码,只能对 GBK 进行 UTF-8 转换,使之看起来 '* 象一个繁体字文件。 '* '* 最后修改:2006/06/15 '* '***************************************************************** 使用说明: ...
PHP页面转UTF-8编码问题 1.在代码开始出加入一行: 复制代码 代码如下: header(“Content-Type: text/html;charset=utf-8”); 2.PHP文件编码问题 点击编辑器的菜单:“文件”->“另存为”,可以看到当前文件的编码,...
在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码,现在已经有很多软件识别bom头,但是还有些不能识别bom头,比如PHP就不能识别bom头,这也是用记事本编辑utf-8编码后执行就会出错的原因...
类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。对于...
PHP页面转UTF-8编码问题 1.在代码开始出加入一行: header(“Content-Type: text/html;charset=utf-8”); 2.PHP文件编码问题 点击编辑器的菜单:“文件”->“另存为”,可以看到当前文件的编码,确保文件编码为:UTF...
在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码,现在已经有很多软件识别bom头,但是还有些不能识别bom头,比如PHP就不能识别bom头,这也是用记事本编辑utf-8编码后执行就会出错的原因...
类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。对于...