关于Apache默认编码错误 导致网站乱码的解决方案
发布时间:2023-07-29 21:19:24
最近经常有同学在使用LAMP/WAMP时,遇到这样的编码错误问题:
A网站程序编码UTF-8编码安装成功,运行成功。
B网站程序编gb2312也要安装在同一服务器上。
这样就出现问题了,Apache默认编码UTF-8在解析A网站的时候没有任何问题,当运行B网站时出现的"蝌蚪文"乱码问题。
单纯的修改Apache默认编码为gb2312这样就导致A网站出现"蝌蚪文"。
问题分析:
如果你在网上搜索 “apache配置”,搜到的页面大多都会建议你在httpd.conf中加上这么一句:AddDefaultCharset GB2312。
对于新手而且是只用GB2312编码的开发人来说,这么做是ok的。但是如果要想使用UTF-8字符集的话,比如 在test.php文件中需要有 meta http-equiv="Content-Type" content="text/html; charset=UTF-8" 这段代码。
这时你再打开浏览器访问test.php页面的话,你看到的是正确的页面。但是如果实际上浏览器还是以GB2312编码解释从服务器返回的response,为什么呢?原因是浏览器是根据http应答消息头部中的 Content-type: text/html; charset=GB2312 来决定使用何种编码解释应答,也就是说apache服务器仍然用GB2312编码传递数据。
所以说如果apache的默认字符集被设置成了GB2312,即使在页面中声明使用UTF-8编码,apache服务器还是会按照GB2312编码来传送http response。没关系,我们把AddDefaultCharset GB2312 改成 AddDefaultCharset UTF-8,看看什么结果?
如果你看到乱码恭喜你,你还知道是乱码问题;如果你看到是空白页面,那么你就惨了,你可能会以为这是其他什么原因造成的,而不会从编码的角度去考虑怎么解决问题。这是为什么?原因在于php文件本身是用系统字符集来编码的,中文的windows XP都是用GB2312,每一个文件头部都有字段指示该文件是用何种方式编码的。当apache接到浏览器的请求后,会让php去解释所请求的页面,比如 test.php。php会识别出test.php的编码方式是GB2312后(就像我们用javac编译java源文件时,编译器默认用系统编码读源文件里的内容。
如果源文件不是用系统编码来保存的,可以用命令javac -encoding指定具体的编码),把数据以GB2312的编码格式传递给apache,而apache服务器不会改变从php传来的数据,只是在应答消息头部中把字符集设置成UTF-8: Content-type: text/html; charset=UTF-8. 也就是说你传递的是GB2312编码的数据,而浏览器却以UTF-8编码来解释应答消息。
由于UTF-8为3个字节表示一个汉子,而普通的GB2312或BIG5是两个。页面输出时,由于上述原因,出现半个汉字的情况,这时该半个汉字会和的>结合成一个乱码字,导致IE无法读完的话,会发现实际上整个叶面全部已经输出了。如果使用的是Mozilla、Mozilla Firefox、Sarafi的浏览器这不会造成这个问题,而是一堆乱码。这是由于Firefox浏览器和IE解析网页编码的策略不同产生的。OK,我们把test.php以UTF-8保存,再用浏览器访问时,就没有问题了。
可这样做,会使得apache目录下的所有web应用只能用同一种编码。如何搞定?
解决办法:
首先,可以使用AddDefaultCharset off来关闭默认文件编码,这样apache服务器就不会在http应答消息头部设置charset,只是设置Content-type: text/html. 而浏览器就会依靠html文件中设置的harset来决定编码。
其次,脚本php.ini文件中的default_charset = “UTF-8″作用同httpd.conf文件,把该行注释掉,使php自动识别文件的编码方式。
这样不论你用什么编码方式,只要test.php中的meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ 与你test.php文件编码方式相同,就不会产生乱码问题。用户提交数据的编码浏览器提交的字符编码由客户端的characher encoding决定。
例如,当前浏览器的编码是Gb2312,用户提交数据后,无论apache设置的编码方式是GB2312还是UTF-8,这时在服务器端接收到的仍是以Gb2312编码的数据。
如果要在返回页面上显示用户刚才提交的数据,而该页面是用UTF-8编码的或者要在数据库中存储的用户提交的数据,而数据库是UTF-8编码的,那就要做字符转换了。


猜你喜欢
- 作为Comsenz旗下的社区产品SupeSite 7.0 全面支持对 Discuz!、UCenter Home 的聚合功能。对于那些已经安装
- 9月23日,作为全球最大的中文搜索引擎公司,百度公司在中国互联网协会、中国通信标准化协会指导下发布了国内首个《搜索营销标准与规范》。百度公
- 下载Hadoop 官网:http://hadoop.apache.org/releases.html先配置jdk环境(教程:https://
- CRONTAB概念/介绍crontab命令用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以
- 如果要想用到rewrite模块,必须先安装或加载rewrite模块。方法有两种一种是编译apache的时候就直接安装rewrite模块,别一
- Eclipse启动Tomcat后无法访问项目解决办法前言:Eclipse中的Tomcat可以正常启动,不过发布项目之后,无法访问,包括htt
- 网站管理员们不愿看到的一件事就是自己的网站被Google收录的页面突然变得很少。也就是说,您的网站以前或许有成千上百页被Google收录,但
- PCIE有四种不同的规格,通过下图来了解下PCIE的其中2种规格 查看主板上的PCI插槽# dmidecode | grep --
- 今天我们来讨论一下有关GoDaddy的Linux主机帐户的绝对路径问题,一定要认真看哦!~/home/content/1/2/3/usern
- 1)善用域名后缀(.com/.cn/.info)国别域名可以告诉谷歌和其他搜索引擎,你的网站所服务的对象来自特定的国家,这样你的网站在这个国
- 1.配置桥接,并抓包验证桥接就是把一台机器上的若干个网络接口连接起来,其结果是,其中一个网卡收到的报文会被复制给其他网卡发送出去。以使得网口
- 一、前期准备一个成功的个人网站,先期的准备工作是很重要的,好的开始等于成功的一半。在这一阶段有两个主要的问题需要考虑。1、站点的定位:主题的
- 二、防病毒系统1、安装McAfeeuvscanforlinuxMcAfeeuvscanforlinux虽然是试用,但是没有什么限制,可以升级
- 北京消息 逛商场购物不带现金,不带银行卡,只要伸手指按下指纹即可完成支付。昨天,支付宝宣布已与立佰趣控股(中国)有限公司达成合作,推出指纹支
- 据说,世界上每年由于垃圾电子邮件给人们带来的损失就高达数亿美元。在Windows操作系统中也许您已经尝够了垃圾邮件给您带来的苦头,让您防不胜
- 如此成功的个人站长在中国站长中只能占据少数,像hao123的前主人,和广捷居的现主人,都是相对比较成功的,他们各自抓住了机遇,实现了大多数站
- 《商业大亨》的时装系统一经推出,便受到众多玩家的一致喜爱,时装系统不仅能够体现出玩家的名流气质,还可以为员工提升各方面的实力,在员工PK中占
- Godaddy主机用户您假如发现需要更改您的主机操作系统,是可以随时进行。操作如下:首先. 登陆你的Account Manager.第二.
- 国内知名IT企业金山软件近日宣布,旗下业务增长重心之一金山毒霸将与泰国知名网游运营商Asiasoft合作,正式进军泰国市场,并推出泰文版金山
- 其实,Windows2000 含有很多的安全功能和选项,如果你合理的配置它们,那么windows 2000将会是一个很安全的操作系统。具体清