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

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

时间: 2024-11-05 16:21:31

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

FCKeditor 2.6 编码错误导致修改的内容出现乱码的解决方法_网页编辑器

FCKeditor 2.6 的目录 editor 下有一文件 fckeditor.html. 我修改了该文件,其中有些中文字,在 IE 中打开之,发现是乱码,原来这个文件有问题.文件中指定了 charset 为 utf-8: <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 可是文件却是以 ANSI 保存的,改为以 UTF-8 保存,中文不再乱码了. 顺便说一下,调用

Apache启动提示错误undefined symbol: libiconv_open解决方法_Linux

昨晚整合apache和php是实在找不到解决办法,Google 百度都转一圈了,总算在百度找回来解决方法,记录一下,这个问题是在apache启动时出现的: ./apachectl  start提示下面的错误: 复制代码 代码如下: httpd: Syntax error on line 57 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/libphp5.so into server: /

修改wamp的apache默认端口80为8088以及www目录_Linux

以修改为8088端口和D:/workphp目录为例. 修改为8088端口 左键托盘图标,在"Apache"里可以直接打开httpd.conf,查找到"Listen 80",可以改成其他端口,我选用8088. 重启wamp,就可以生效了.但是"Localhost"."phpMyAdmin"."SQLiteManager",你可以点击打开看到依旧是默认的80端口.找到wamp安装目录下的wampmanager.

默认apache编码导致DEDECMS乱码及其他乱码总结

朋友的dedecms乱码,文件的编码以及head里面的meta的编码都是正确的,把生成的HTML下载到本地打开,也都是正常的,一放到服务器就乱码. 经过更为细致的检查,发现他在根目录下的.htaccess里面配置了AddDefaultCharset UTF-8,这样就会导致apache默认使用utf-8编码向浏览器发送数据,客户的dedecms是GBK编码,所以自然就乱码了,所以然还有人在.htaccess里面配置这个...下面在网上找到的资料: 首先,可以使用AddDefaultCharset

iis 乱码 错误信息-iis的在浏览器的错误信息是乱码(不是编码问题)

问题描述 iis的在浏览器的错误信息是乱码(不是编码问题) 就是不能显示中文错误信息吗?能不能去掉奇怪的问号? 解决方案 asp默认错误是gb2312的,你站点肯定是utf-8编码不一样所以乱码ASP代码发生错误显示信息乱码解决办法 解决方案二: 什么不是编码问题,就是编码问题.而且你的asp页面的sql语句有错误. 保存asp的时候选择正确的编码 解决方案三: 一个是数据库操作语句有问题,另一个你的页面编码也有问题.是不是用了utf-8编码但是没有存为utf-8格式的页面 解决方案四: 不过我

Windows下PHP安装路径配置错误导致Apache无法启动怎么解决?

  这篇文章主要介绍了Windows下PHP安装路径配置错误导致Apache无法启动的解决方法,本文可以说是一个引号引发的悲剧,需要的朋友可以参考下 LoadModule php5_module "C(/D):/Program Files/php5/php5apache2_2.dll" PHP安装路径引起的apache无法启动错误 今天给一同事的PC机安装部署web服务的时候,按同事要求把所有程序文件放到安装目录的program files下,于是我把apache安装到了c:progr

网站域名解析错误导致大规模断网

摘要: 域名解析示意图 网站域名解析错误导致大规模断网:全球13台根域名服务器10台在美国,中国无掌握权. 昨日下午,全国DNS域名解析系统出现了大范围的访问故障,全国大半网站不同程 域名解析示意图 网站域名解析错误导致大规模断网:全球13台根域名服务器10台在美国,中国无掌握权. 昨日下午,全国DNS域名解析系统出现了大范围的访问故障,全国大半网站不同程度地出现了不同地区.不同网络环境下的访问故障.此次故障是网络技术故障,还是黑客袭击?网民访问这些网站会遇到哪些风险,该如何应对? ■ 探因 目

域名解析示意图 网站域名解析错误导致大规模断网

网站域名解析错误导致大规模断网:全球13台根域名服务器10台在美国,中国无掌握权. 昨日下午,全国DNS域名解析系统出现了大范围的访问故障,全国大半网站不同程度地出现了不同地区.不同网络环境下的访问故障.此次故障是网络技术故障,还是黑客袭击?网民访问这些网站会遇到哪些风险,该如何应对? ■ 探因 目标网站曾有黑客攻击行为 网络安全专家表示,此次网站无法访问的原因是网站域名解析错误. 百度 公司一名技术人员分析认为,网站域名解析错误存在几种可能.一是黑客攻击国外根服务器造成国内服务器域名解析遭到污

mac apache 终端 错误-Mac Apache 无法打开 终端 计算机名 乱码

问题描述 Mac Apache 无法打开 终端 计算机名 乱码 Last login: Wed Oct 15 20:58:03 on ttys000 zx76-2:~ kavee$ sudo apachectl -k start Password: httpd: apr_sockaddr_info_get() failed for zx76-2.dev httpd: Could not reliably determine the server's fully qualified domain