[PHP+MySQL开发基础分享]关于PHP会话和网页中文乱码的问题
1.在启用会话时,经常会出现这样的提示:
1 Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at D:\xampp\htdocs\php\test\html\includes\header.html:1) in D:\xampp\htdocs\php\test\html\includes\header.html on line 2
2 Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at D:\xampp\htdocs\php\test\html\includes\header.html:1) in D:\xampp\htdocs\php\test\html\includes\header.html on line 2(当然,文件路径和文件名可能会不同,但提示的本意是相同的,也就是说在发送会话前,已经有东西发送到浏览器中了)
原因:启用会话,要求在会话开启前,不能有任何内容发送到浏览器。但是在记事本中,似乎在启用会话前,没有什么内容啊!
如果在记事本中使用ANSI来保存文件,不会有什么问题。也就是说,如果是英文网页,没有问题。
但是如果使用utf-8来保存文件,则会在文件头上输入一个“锘?”字,但记事本是看不出来的。可以使用UltraEdit来查看。在UltraEdit中,编辑文件,去掉这个“锘?”字,再保存即可。即Utf-8 无BOM格式。
2.使用中文时,不能保存为ANSI格式,否则会显示乱码,此时应保存为utf-8 无BOM格式。
如果出现上述第1个问题,则在UltraEdit编辑器中去掉这个“锘?”字即可。
此外,还可以在EditPlus中打开这个文件,选择“文档——文件编码方式——更改文件编码方式”,在出现的“编码方式”对话框中选择“utf-8”即可。(注意)
或者,选择Zend Studio,打开这个文件,选择“Eidt-Set Encoding”,在“Set Encoding”中选择“Default(GBK)”此时,在文件头会显示“锘?”,去掉该字后,再保存,即可。
3.在头文件中,设置下面的行中的语言:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
一般不会对中文有什么影响。(中文lang=”chs”)
但下面这行:
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1" />
会对中文产生影响,即charset属性应设置成charset=gb2312,否则会是乱码。
或者,保存为utf-8 有BOM的格式,但此时会话功能会出错。
或者,不设置charset属性,而是由浏览器自行处置。
4.综上,虽然说记事本可以作为PHP的编辑器来开发网页,但在处理中文时,还是会遇到问题。因为要在网页上正确显示中文,不能将其保存为ANSI文件,而只能保存为大字符文件,此时记事本会隐藏地在文件头中加上一行。因此,会引发会话问题或其它问题。
5.因此,开发中文网页时,最好使用其它的编辑器。
(1)使用EditPlus时,保存时直接选择中文编码方式。
(2)使用UltraEdit时,选将文件保存为UTF-8-无BOM格式,然后再输入代码。
(3)使用Zend时,必须在头文件中包括字符集:
<meta http-equiv="content-type" content="text/html;charset=gb2312" />
或者:
charset=gbk。解决乱码问题的总结
1.编码要保持一致,即服务器数据库编码、PHP文件编码与网页编码三者要一致,否则会出现乱码
2.可以在PHP数据库连接代码中插入代码,例如:
mysql_query("set names 'gb2312'");
将提取的数据库数据转换为gb2312码。
3.在网页头文件中,插入设置中文字符集的代码,例如:
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
4.如果还不行,则在代码文件开头,放置下面的代码:
header("Content-Type: text/html; charset=gb2312");
使网页以指定的编码呈现。
当然,上面是以gb2312为例,如果是utf8,则作相应的修改。
5.最后,还是有乱码,则重头开始吧,这是因为如果数据库中已有数据,那么所作的修改一般是无效的。这可能是在本机上调试很好,但传到服务器中后,出现了乱码,而怎么也解决不成功的情形。在服务器中按指定的编码重新创建表,然后重新上传代码文件,重新插入数据进行测试。
由于时间紧,此文有点乱,请谅解。

浙公网安备 33010602011771号