PHP中utf-8编码格式之BOM引发的问题
2009-10-10 11:34
369 查看
一个很常见的错误:在使用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格式,而网页的主体保存为正常格式,并在第一行引用这个外部文件,这样就解决了这个问题。
时经常会遇到的,就是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格式,而网页的主体保存为正常格式,并在第一行引用这个外部文件,这样就解决了这个问题。
相关文章推荐
- 关于visiou studio 编辑器 设置 UTF-8 无bom 编码格式的问题
- php文件代码采用UTF-8编码的BOM问题---转自CSDN---十方地藏---http://blog.csdn.net/webdesman
- 黄聪:php传递URL中文编码为带%的编码获取后乱码问题(页面utf-8格式)
- 解决CodeSmith代码模版输出文件的编码格式为有bom的UTF-8的问题
- 浏览器处理由带BOM的utf-8格式的php文件输出的HTML问题
- BOM与读取UTF-8编码格式文件首行乱码问题
- UTF-8文件编码格式中有无签名问题汇总(BOM)
- [原]几种流行php编辑器对utf-8编码 bom问题的处理比较
- php文件代码采用UTF-8编码的BOM问题
- PHP中转换编码问题 GBK/UTF-8等
- Warning Cannot send session cookie - headers already sent...问题的解决(PHP的UTF-8 BOM引起的问题)
- php输出UTF-8格式XML文件中文乱码问题(含asp,asp.net,jsp代码)
- PHP文件保存出现的BOM头(utf-8)的解决方式——保存格式为ANSI即可
- PHP转换编码问题GBK/UTF-8
- 解决PHP生成UTF-8编码的CSV文件用Excel打开乱码的问题
- UTF-8编码引发的页面奇怪问题
- 已解决了ajax(源文件编码gb2312)发送+php接收(源文件编码gb2312)中文乱码问题(utf-8也通用)
- UTF-8编码问题总结:HTML,PHP,MYSQL,JS,FLASH
- php adodb 从mysql数据库中输出中文显示到utf编码网页乱码问题
- 解决PHP生成UTF-8编码的CSV文件用Excel打开乱码的问题