服务器之家:专注于服务器技术及软件下载分享
分类导航

云服务器|WEB服务器|FTP服务器|邮件服务器|虚拟主机|服务器安全|DNS服务器|服务器知识|Nginx|IIS|Tomcat|

服务器之家 - 服务器技术 - WEB服务器 - 关于Apache默认编码错误 导致网站乱码的解决方案

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

2021-04-01 01:50Apache教程网 WEB服务器

Apache默认编码UTF-8在解析A网站的时候没有任何问题,当运行B网站时出现的"蝌蚪文"乱码问题

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

延伸 · 阅读

精彩推荐
  • WEB服务器宝塔面板迁移系统盘/www到数据盘/data

    宝塔面板迁移系统盘/www到数据盘/data

    如果是纯净系统还没安装宝塔面板,直接连接终端不墨迹,命令搞起来: 第一步:进入data目录(data是数据盘名称,有很多是home,你的数据盘名称是什么就...

    cnblogs9072020-04-04
  • WEB服务器Bt(宝塔面板)忘记用户名密码的具体情况分析和解决应对

    Bt(宝塔面板)忘记用户名密码的具体情况分析和解决应对

    这篇文章主要为大家详细介绍了Bt(宝塔面板)忘记用户名密码的具体情况分析和解决应对,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,有需要的...

    361模板网3802020-06-04
  • WEB服务器阿里云svnweb服务器

    阿里云svnweb服务器

    阿里云 Subversion(简称 SVN)是一个版本控制系统,可帮助团队管理代码并进行版本控制。与传统的代码管理方式相比,它具有更好的版本追踪、可控性、协...

    未知2232023-06-02
  • WEB服务器web实时语音云服务器

    web实时语音云服务器

    Web实时语音 云服务器 (Real-Time Voice Cloud Server for Web) 摘要: 随着互联网技术的快速发展,越来越多的应用场景需要实时语音通信功能。而Web实时语音云服...

    未知642023-07-07
  • WEB服务器贵州web服务器内存云空间

    贵州web服务器内存云空间

    贵州web服务器内存云空间 贵州是中国内地的一个省份,也是中国最大的养生之地,其优美的山水和丰富的地质资源让这里成为了一个备受瞩目的旅游胜地。...

    未知1212023-05-31
  • WEB服务器云的服务器搭建web

    云的服务器搭建web

    云的服务器搭建web 引言 在当今信息技术快速发展的时代, 云服务器 已成为许多企业和个人选择的首选,尤其是在Web应用程序的开发和部署中。云服务器提...

    未知1012023-06-30
  • WEB服务器湖北web服务器租用云服务器

    湖北web服务器租用云服务器

    湖北省是我国的一个经济大省,有着丰富的资源和人才,同时也拥有着广泛的网络基础设施,其中包括众多的 Web 服务器。这些 Web 服务器在过去几年中一直...

    未知1542023-06-05
  • WEB服务器江苏web服务器托管云主机

    江苏web服务器托管云主机

    江苏web 服务器托管 云主机 云计算是近年来快速发展的一个概念,它已经成为了很多企业的首选解决方案。云计算的核心思想是将计算资源、存储资源和网...

    未知1282023-08-16