网站运营
位置:首页>> 网站运营>> 关于Apache默认编码错误 导致网站乱码的解决方案

关于Apache默认编码错误 导致网站乱码的解决方案

  发布时间:2023-07-29 21:19:24 

标签:Apache,默认编码

最近经常有同学在使用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编码的,那就要做字符转换了。

0
投稿

猜你喜欢

  • 说它最权威是因为是Google工程副总裁,负责排名算法的Udi Manber,发表在Google官方博客的一个帖子。下面捡主要内容翻译一下,
  • 以前黑站黑了很多,但是就没有想过会不会被追踪到,都没有想过怎么去擦自己的屁股,万万没想到在自己不再黑站的时候,却发现了自己的BBS被黑了。根
  • 站点运营推广类的文章百度下可以搜索到36万条之多。站长对此类话题的关注程度可见一斑。许多中小站长面对一个新上线的站点并不知如何良好的运营和广
  • 11月9日下午消息,继涉足电子杂志、淘宝开店后,徐静蕾旗下的开啦零束缚配饰品牌今日正式上线,并选择服装垂直销售公司VANCL凡客诚品作为独家
  • 如果您的网站正在投放 AdSense 推介,请您注意,近期 AdSense 推介计划将会进行调整。在新的调整中,对于北美洲、拉丁美洲和日本以
  • 现在,一些网站推出了G容量的免费邮箱,引来许多网友纷纷注册使用。实际上,我们利用自己的服务器,使用任何一款邮件服务器软件,就能架设千兆甚至万
  •  Win2003 Server的安全性较之Win2K确实有了很大的提高,但是用Win2003 Server作为服务器是否就真的安全
  • 二、高级配置1、使用独立服务a.vi/etc/xinetd.d/vsftpd把disable=no还改成yes,不再需要它了!b.vi/et
  • 近来关注了一些做外贸的企业的英文网站,发现了一些以前没有关注的问题。这些问题在笔者看来,对做外贸来说应该说是非常重要的。在这里,写出来与大家
  • 最近公司有一个奇怪的需求,意思是有一个网页,要时时的打开着。现在只有把这个网页在服务器上打开。这样才能满足需求。但我在应用中遇见了个问题。我
  • 在过去的10年,架设一个大型网站是一个非常艰巨的任务,那可不是非专业人士可以完成的。现在好了,亚马逊开放了他们的服务器架构,一切都改变了。
  • 在做网站优化的时候我们首先要做的是对竟争对手加以分析从而可以更好的实施方案,清楚了对手的情况我们还需要清楚网络优化应该避免的一些问题,一般来
  • 对于网络游戏,本人历来是不怎么喜欢,只因下载的客户端庞大。98年至今本人还一直保留着一款红色警戒游戏,既可以单机,也可以偶尔联网对垒一下。随
  • 在百度C2C产品“百度有啊”即将上线的时候,淘宝网站曾经屏蔽百度搜索爬虫,禁止百度搜索引擎抓取淘宝网站的网页内容,淘宝官方的解释是“杜绝不良
  • DDOS攻击的重心是堵塞服务器,给域名解析访问造成困难,被攻击后我们可以采用以下方法:第一步,用一切方法告诉你的网友,通过IP来打开主页。这
  • 有些发布商可能收到过这样的通知邮件:“发布商不得更改 Google 广告的行为或定位,包括在 “浮动框脚本”中实施 AdSense 广告代码
  • 如果说病毒制造者是造成目前网络上病毒肆虐的罪魁祸首,那么为病毒四处传播“提供”渠道的各种网络通信形式
  • “黑客”盗QQ用户号码及视频冒名行骗,民警提醒慎加陌生人为好友家住杨家坪的徐丽(化名)在网上跟弟弟视
  • 刚才在月光博客上看到一有关MD5的安全性问题的文章,文章写得不错,但是我个人还有一些想补充的地方,算是对作者这个文章的补充。对于一些经常上网
  • 各位是否还记得我们之前曾经报道过的微软 IE 项目主管炮轰 Chrome 没有隐私一事?其中就提到了在 Chrome 地址栏中每输
手机版 网站运营 asp之家 www.aspxhome.com