| 昊's profile烂笔头记事BlogGuestbookNetwork | Help |
|
|
November 21 126,163邮箱,教育网登陆通道教育网用户幸福了,有了专用通道。访问速度大大的提高了。 126邮箱:http://edu.mail.126.com 或者 http://edu.126.com 163邮箱:http://edu.mail.163.com Cannot modify header information - headers already sent by...解决方法今天把PHP代码用记事本保存为utf编码,就出现了下面提示: Warning: Cannot modify header information - headers already sent by (output started at E:\My documents\My Work\zgjdwx\test2.php:1) in E:\My documents\My Work\zgjdwx\include\common.inc.php on line 20 这个错误是因为在header前面有html输出导致的。因为之前程序运行正常,所以排除了程序的问题。 经过查询,原来是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。 UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。 Windows就是使用BOM来标记文本文件的编码方式的。 PHP也不支持BOM。 PHP在设计时就没有考虑BOM的问题,也就是说他不会忽略UTF-8编码的文件开头BOM的那三个字符。由于必须在<?或者<?php后面的代码才会作为PHP代码执行,所以这三个字符将会直接输出。 用ultraedit打开,对ultraedit进行设置:高级-配置-文件处理-Unicode/utf-8检测,所有选项都不选择。然后会发现文件前面有一个“锘?”,删除掉,然后保存为无BOM的utf编码。 也可用Dreamweaver保存为utf编码。 总结:如果程序中无中文,可以直接使用ANSI编码。如果存在中文,要保存为无BOM的utf编码。切记不要使用记事本来进行转换。 November 15 Ajax乱码问题整理今天使用AJAXRequest,返回值中的中文总是乱码。创建AJAXRequest对象时,自带的charset方法并不起作用。 网上搜了一下,用下面的方法轻松解决了问题。 产生原因 解决的办法就是在送出的流里面加一个HEADER,指明送出的是什么编码流,这样XMLHTTP就不会乱搞了。 PHP:header('Content-Type:text/html;charset=GB2312'); 附一个PHP的unicode解码程序
|
|
|