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

wamp php字符编码,关于Apache默认编码错误 导致网站乱码的解决方案相关推荐

  1. python设置默认utf8编码_Python设置默认编码为utf8的方法

    本文实例讲述了python设置默认编码为utf8的方法.分享给大家供大家参考,具体如下: 这是Python的编码问题,设置python的默认编码为utf8 python安装目录:/etc/python ...

  2. linux下查看Mysql默认编码、修改默认编码

    登陆mysql 首先,使用命令登陆mysql 如下,截图. 查看编码 接着,使用命令查看数据库的编码方式. show variables like 'character%'; 修改my.cnf文件 下 ...

  3. Apache服务器上部署的网站乱码问题的解决办法

    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 在文件 ...

  4. Apache以及PHP的默认编码问题解决(详解)

    如果你在网上搜索 "apache配置",搜到的页面大多都会建议你在httpd.conf中加上这么一句:AddDefaultCharset GB2312.对于新手而且是只用GB231 ...

  5. php iso 8859 1 解码,关于php:Apache的默认编码是ISO-8859-1,但网站是UTF-8?

    我必须第一次处理编码,我对PHP.Apache和浏览器如何处理编码感到困惑.PHP和Apache默认使用ISO-8859-1,但大多数网站是UTF-8.什么时候ISO-8859-1转换成了UTF-8? ...

  6. python为源文件指定系统默认字符编码是_系统编码、文件编码与python系统编码

    在linux中获取系统编码结果: Windows系统的编码,代码页936表示GBK编码 可以看到linux系统默认使用UTF-8编码,windows默认使用GBK编码.Linux环境下,文件默认使用U ...

  7. python unicode编码转换中文_python unicode转中文及转换默认编码

    一. 在爬虫抓取网页信息时常需要将类似"\u4eba\u751f\u82e6\u77ed\uff0cpy\u662f\u5cb8"转换为中文,实际上这是unicode的中文编码.可 ...

  8. FileReader采用的默认编码

    很久以前听教学视频,里面讲到Java采用的默认编码是ISO-8859-1,一直记着. 但是最近重新看IO流的时候,惊讶地发现,在不指定字符编码的情况下,FileReader居然可以读取内容为中文的文本 ...

  9. Source Insight乱码的解决方案,SI不支持UTF-8字符编码乱码

    最近使用source insight查看一些开源代码,显示中文就乱码,据说是因为source insight不支持utf-8编码,默认编码方式为ANSI码.所以需要将utf-8等非ANSI码的文件转换 ...

最新文章

  1. 10个方法让程序员更加优秀
  2. Java中字符串和数字间转换
  3. 作为大龄开发人员,敢问路在何方?
  4. SQL Server 2005中的SQLCMD工具使用
  5. Cognos访问权限之让拒绝更友善
  6. CCF认证2014-9-2 画图
  7. django基础 第一章 环境搭建
  8. 【摄影测量原理】第一章:摄影测量学基础
  9. 骁龙cpu linux内核,高通骁龙888 SoC在Linux 5.12内核才被支持,以往怎么兼容的?
  10. python抓取电影海王影评词云生成
  11. 不支持android浏览器下载工具,android 默认浏览器 无法下载,此手机不支持此内容(自定义文件or APK文件看过了)...
  12. SSRF---gopher和dict打redis
  13. 企业微信开发实战(三、OA审批之回调通知、获取审批单号、审批详情)
  14. 使用Reverse SSH Tunnel实现内网穿透的可行性方案
  15. 陶哲轩实分析 附录 A 习题解答
  16. 编写python爬虫基础_0基础如何快速写python爬虫
  17. 女人不适合做产品经理?
  18. js高效生成一组随机数(不重复)
  19. php 个人摄影,展示个人摄影作品的12种方式(ZT)
  20. java mac 加密_Algorithm:Java加密解密之MAC(消息认证码)

热门文章

  1. Paddle内置的网络模型
  2. 技术不够时间来凑,梦圆国一永不放弃
  3. 世界名画 | 陌上花开,可缓缓归矣
  4. 反函数的导数:理论与应用
  5. 如何让自学更有效率?
  6. 新制造 新工科 新机制——李泽湘教授在工程教育高峰论坛上的报告
  7. Python几个函数的の测试
  8. 第十五届全国大学生智能车竞赛线上竞赛方案(草案)
  9. linux编译动态库未定义,linux 编译动态链接库 so,避免运行时才发现函数未 ......
  10. elf section类型_ELF文件解析(一):Segment和Section