一个很常见的错误:在使用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格式,而网页的主体保存为正常格式,并在第一行引用这个外部文件,这样就解决了这个问题。
分享到:
相关推荐
然而,UTF-8编码有一种特殊的形式,即带有BOM(Byte Order Mark)的UTF-8,也被称为UTF-8 with BOM。BOM是一个特殊的字符序列,用于标识文件的编码方式,但在某些情况下,BOM可能会引起问题,例如在某些编程语言中...
标题 "php utf-8编码去bom小工具" 指的是一个PHP脚本,用于去除UTF-8编码文件中的BOM(Byte Order Mark)。BOM是UTF-8编码的一个可选特征,它在文件开头放置三个特殊的字节来标识文件的字符编码,但这可能会导致在...
对于ASCII字符,UTF-8编码与ASCII相同,都是单字节。UTF-8的特殊之处在于它包含一个字节顺序标记(BOM),即UTF-8+BOM,但大多数情况下,UTF-8无BOM更常见。 在PHP中,进行字符编码转换可以使用内置函数,如`mb_...
BOM是Byte Order Mark的缩写,中文可译为“字节顺序标记”,它在UTF-8编码中用来标识文件的编码类型。UTF-8是一种广泛使用的字符编码标准,它可以表示世界上几乎所有的字符。然而,UTF-8的BOM并不是必需的,因为UTF-...
前次一次工程开发,有...本压缩包附带GB/BIG/UTF-8文件编码批量转换工具(文件名:GB2UTF81.exe) 这个工具很好很强大 还有一个bom批量检测清除工具,php版本的。只可惜只支持当前目录。不支持子目录(文件名:bom.php)
一、介绍 UTF-8 是一种在web应用中经常使用的一种 Unicode 字符的编码方式,使用 UTF-8 的好处在于它是一种变长的编码方式,对于 ANSII 码编码长度为1个字节,这样的话在传输大量 ASCII 字符集的网页时,可以大量...
在UTF-8编码中,英文字符只占1个字节,而大部分中文字符则占用3个字节。 当需要将GB2312编码的文件转换为UTF-8编码时,通常涉及以下步骤: 1. **识别编码**:首先,需要确定文件的原始编码是GB2312。这可以通过...
### PHP Web项目中UTF-8编码问题详解 #### 一、HTML页面转UTF-8编码问题 1. **HTML头部元信息** 在`<head>`标签内,且位于`<title>`标签之前,必须添加`<meta http-equiv="Content-Type" content="text/html;...
如何解决BOM:先放在服务器可执行目录下,使用 浏览器http://服务器ip/存放路径/bom.php来 访问,填写实际路径执行后可得到存在有BOM的PHP文件,然后再用notepad++打开,在菜单选“格式”->“转为UTF-8无BOM..”即可. ...
1. **PHP文件编码**:确保所有PHP源代码文件使用UTF-8无BOM格式保存。BOM(Byte Order Mark)可能会导致在某些情况下出现问题。 2. **HTTP头部**:在PHP脚本中通过`header()`函数设置响应头的`Content-Type`为`text...
UTF-8不需要BOM来表明字节顺序,但可以...字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。 Windows就是使用BOM来标记文本文件的编码方式的
在Web开发中,UTF-8编码是一个至关重要的概念,它是一种广泛使用的字符编码标准,能够支持全球大部分语言的字符表示。以下是对Web开发中遇到的UTF-8问题的详细总结: 1. HTML页面转UTF-8编码问题: - 在HTML文件的...
6. **Flash中的UTF-8问题**:Flash ActionScript 3.0支持UTF-8编码,但在加载XML或文本数据时,需确保数据源和ActionScript之间编码的一致性。可以使用`flash.net.URLLoader`加载数据并指定`dataFormat=flash.net....
3. **编码冲突**:如果你的项目中既有GBK编码的文件,又有UTF-8编码的文件,可能会引发编码不一致的问题,需要统一编码格式。 `GB2UTF8.exe`这个程序很可能就是实现上述功能的命令行工具或者图形界面应用。使用时,...
在UTF-8编码中,BOM由三个特定的字节序列(0xEF, 0xBB, 0xBF)组成,出现在文件的开头。对于大部分文本编辑器和PHP解释器来说,BOM是透明的,但某些情况下,如直接包含或预处理PHP文件时,BOM可能导致输出乱码或解析...
最后,值得一提的是,在处理UTF-8编码文本时,标准的PHP函数如substr()并不完全适用于UTF-8编码的字符处理,因为它们是按字节来处理的,而UTF-8编码中一个字符可能占用多个字节。因此,需要使用专门处理UTF-8字符的...
在Web开发中,国际化网站需要将编码从GB2312转为UTF-8编码,这是一个重要的步骤,它能够帮助网站正确处理多语言内容,尤其是针对中文等东亚语言。转换编码时,如果不彻底,会遇到许多编码问题,下面将详细介绍在五个...
今天在CSDN看到一个php输出空白隐形字符65279的问题,在网上找了下,发下这个65279字符是php用来标记文件是utf-8编码的,输出的时候会一起输出到客户端,导致客户端如果使用ajax得到返回值时,无法匹配字符串。...
网站开发过程中,尤其是在进行国际化的过程中,常常会遇到UTF-8编码相关的乱码问题。这些问题主要集中在以下几个方面: 一、HTML页面转UTF-8编码问题 1. 首先,需要在HTML文档的部分,标签之前添加标签来声明编码:...