PHP字符集编码出现乱码的解决办法_PHP教程

php中文网
发布: 2016-07-15 13:30:35
原创
1038人浏览过

要么页面原始汉字和从数据库里取出的汉字全是乱码;要么原始汉字和数据库汉字,一个显示正常了,另一个就变成乱码了。很烦很气人! 问题需要一步一步的解决。在实际操作以下方法之前,需要配置 web 服务器,使其与 php 集成,最终可以调试 php 程序。我们以常见的 gb2312 和 utf-8 字符集为例来测试和说明。浏览器是 ie7.0。

页面原始汉字乱码的解决

PHP字符集编码的原理我就不说了,网上搜索一下字符串“PHP 乱码”,整框整框的文章供大家阅读。我最关心的是具体怎么做,就可以解决这个实际问题。我最喜欢使用的文本编辑器是 UltraEdit,不仅仅因为它可以进行 16 进制编辑,还因为它支持多编码文档。解决这个问题就需要使用 UltraEdit 的这个功能。

打开中文 Windows,用 UltraEdit 创建一个文本文件,手工输入一个 PHP 页面文件,文件内容如下。保存为 test1.php 文件,注意保存时“格式”下拉框选择“默认”- 特别注意这里。

立即学习PHP免费学习笔记(深入)”;

<OL class=dp-xml><LI class=alt><SPAN><SPAN class=tag><</SPAN><SPAN> </SPAN><SPAN class=tag-name>Html</SPAN><SPAN class=tag>></SPAN><SPAN> </SPAN></SPAN><LI><SPAN class=tag><</SPAN><SPAN> </SPAN><SPAN class=tag-name>head</SPAN><SPAN class=tag>></SPAN><SPAN> </SPAN><LI class=alt><SPAN class=tag><</SPAN><SPAN> </SPAN><SPAN class=tag-name>title</SPAN><SPAN class=tag>></SPAN><SPAN>页面标题</SPAN><SPAN class=tag><</SPAN><SPAN> /title</SPAN><SPAN class=tag>></SPAN><SPAN> </SPAN><LI><SPAN class=tag><</SPAN><SPAN> </SPAN><SPAN class=tag-name>META</SPAN><SPAN> </SPAN><SPAN class=attribute>http-equiv</SPAN><SPAN>=</SPAN><SPAN class=attribute-value>Content</SPAN><SPAN>-Type </SPAN><SPAN class=attribute>content</SPAN><SPAN>=</SPAN><SPAN class=attribute-value>"text/html; charset=gb2312"</SPAN><SPAN class=tag>></SPAN><SPAN> </SPAN><LI class=alt><SPAN class=tag><</SPAN><SPAN> /head</SPAN><SPAN class=tag>></SPAN><SPAN> </SPAN><LI><SPAN class=tag><</SPAN><SPAN> </SPAN><SPAN class=tag-name>Body</SPAN><SPAN class=tag>></SPAN><SPAN> </SPAN><LI class=alt><SPAN>电脑学习网:</SPAN><SPAN class=tag><</SPAN><SPAN> </SPAN><SPAN class=tag-name>br</SPAN><SPAN class=tag>></SPAN><SPAN> </SPAN><LI><SPAN class=tag><</SPAN><SPAN> /body</SPAN><SPAN class=tag>></SPAN><SPAN> </SPAN><LI class=alt><SPAN class=tag><</SPAN><SPAN> /html</SPAN><SPAN class=tag>></SPAN><SPAN> </SPAN></LI></OL>
登录后复制

用 IE 浏览器打开网站的这一页面。可以看到,页面显示正常。在 IE 浏览器的“查看”/“编码”菜单下看到(勾选了“自动选择”),字符编码是 GB2312。

[Firefox 2.0 下显示正常。]

然后,在 UltraEdit 的“文件”菜单下,选“另存为”,格式选择“UTF-8”,文件名为 test2.php。用 IE 浏览器打开这一页面。可以看到,页面显示正常(其实英文字体已经有略微的变化了)。在 IE 浏览器的“查看”/“编码”菜单下看到(勾选了“自动选择”),字符编码是 UTF-8,自动变了!注意 一句并没有修改,但是浏览器却自动辨别出了真实的PHP字符集编码!看来 IE 还是比较聪明的,也说明 IE 自动判别字符集是比 METE 标签中 charset=xxx 的定义优先的。

[Firefox 2.0 下显示出现乱码。]

在该页面首部加语句

立即学习PHP免费学习笔记(深入)”;

<OL class=dp-xml><LI class=alt><SPAN><SPAN class=tag><?</span><SPAN class=tag-name>php</SPAN><SPAN> </SPAN></SPAN><LI><SPAN>header("Content-Type:text/html;</SPAN><LI><SPAN class=attribute>charset</SPAN><SPAN>=</SPAN><SPAN class=attribute-value>utf</SPAN><SPAN>-8");  </SPAN><LI class=alt><SPAN class=tag>?></SPAN><SPAN> </SPAN></LI></OL>
登录后复制

立即学习PHP免费学习笔记(深入)”;

再次保存该页面文件,“格式”下拉框选择“默认”,文件名为 test3.php。用 IE 打开网站里的该文件,这次看到,除过英文字母,汉字变成乱码了!同时在 IE 浏览器的“查看”/“编码”菜单下看到(勾选了“自动选择”),字符编码是 UTF-8,已经被强制改变了。

文心快码
文心快码

文心快码(Comate)是百度推出的一款AI辅助编程工具

文心快码 35
查看详情 文心快码

出现汉字乱码的原因,是因为原本的 GB2312 编码,被强制以 UTF-8 的编码形式显示,所以乱码出现了。这个时候在浏览器里人为指定 GB2312 编码,页面汉字又显示正常了(真正制作页面时是不能这么做的,非要让浏览者自己选择PHP字符集编码,一个是浏览者可能根本不知道怎么选择编码、选什么编码,再者也显得我们太菜了!)。

[Firefox 2.0 下显示出现乱码。]

在该页面首部加语句

立即学习PHP免费学习笔记(深入)”;

<OL class=dp-xml><LI class=alt><SPAN><SPAN class=tag><</SPAN><SPAN> ?php  </SPAN></SPAN><LI><SPAN>header("Content-Type:text/html;</SPAN><LI><SPAN class=attribute>charset</SPAN><SPAN>=</SPAN><SPAN class=attribute-value>GB2312</SPAN><SPAN>");  </SPAN><LI class=alt><SPAN class=tag>?></SPAN><SPAN> </SPAN></LI></OL>
登录后复制

立即学习PHP免费学习笔记(深入)”;

再次保存该页面文件,“格式”下拉框选择“UTF-8”,文件名为 test4.php。用 IE 打开网站里的该文件,奇怪:看到页面汉字显示正常,并不是预想到的乱码?!在 IE 浏览器的“查看”/“编码”菜单下看到(勾选了“自动选择”),PHP字符集编码仍然是 UTF-8,并没有被强制改变了 GB2312 字符集。

这个时候在浏览器里人为指定 GB2312 编码,发现 IE 浏览器并不能人为指定编码。看来 IE 浏览器对 UTF-8 字符集特别关照。无论是在 META 标签指定,还是 PHP 语句指定,都不能让 IE 浏览器显示出汉字乱码。

[Firefox 2.0 下显示出现乱码。]

小结一下: 以上测试主要在 IE7.0 下进行,Web 服务器为 Windows Server 2003 下的 IIS6.0,PHP 版本为 4.4.7。可以看到,IE7.0 为了正确识别字符集做了很多额外的自动处理的工作,以显示其智能和友好。有时太殷勤了反而使我们不知所措。由于汉字乱码问题与不同的浏览器及其不同的版本、Web 服务器、后台脚本和不同的字符集都有点关系,所以问题显得特别复杂。作为 Web 编程人员,主要关心与自己有关的因素就可以了,没必要成为PHP字符集编码的专家。为了兼容目前流行的 IE 和 FF 浏览器,我们可以按照以下简单的方法处理我们的 PHP 代码:

1,页面的真正字符集与 META 标签指定的应该一致;

2,也可以使用 header("Content-Type:text/html;charset=xxx"); 语句指定字符集,但是不能与字符的真正字符集冲突,也不能与 META 标签冲突。(尽管根据测试结果表明,当 header() 和 META 冲突时,header() 比 META 指定的字符集更优先,因为根据 HttpWatch Basic 跟踪显示,header() 指定字符集后,IE 浏览器 Type 会明确的得到字符集指定。但是不能保证其它非主流浏览器也会这样。)

3,PHP字符集编码不能与数据库取回的字符的字符集冲突,否则页面会出现页面本身的汉字和数据库取回的汉字,全部乱码或部分乱码问题。


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/446271.htmlTechArticle要么页面原始汉字和从数据库里取出的汉字全是乱码;要么原始汉字和数据库汉字,一个显示正常了,另一个就变成乱码了。很烦很气人!...
相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号