在apache的配置文件httpd.conf中,或许我们会用到
AddDefaultCharset UTF-8
来设置所有主机或者某虚拟主机的字符编码。
这个设置会对本主机内的所有文件产生影响, 并且它的优先级高于主机网页文件内的:
<META http-equiv=Content-Type content=”text/html; charset=gbk”>
也就是说,如果由于某种原因,httpd.conf中设置了本站的字符集为utf-8
而你的网页字符集全都是gbk的,
即使你在网页中指明了charset=gbk
那么用浏览器打开你的网站,仍然会显示乱码。
几种情况:
1、页面没有指定charset , Apache配置defaultcharset gbk , 页面文件编码是utf-8。执行结果是页面乱码。这个几乎是肯定的,在页面没有meta指明charset,而服务器的 defaultcharset 又没有被注释掉,可以肯定页面是会乱码的,这个时候服务器的设置生效;
2、页面指定charset为utf-8, Apache配置defaultcharset gbk. 页面文件是utf-8。执行结果是页面乱码。这个就验证了当服务器的defaultcharset打开时,会忽略掉页面的编码设置;
3、PHP header申明 charset 为 utf8, Apache配置defaultcharst gbk,页面文件编码是utf8。执行结果是页面正常。这个说明header中指定的信息的优先级要高于服务器及浏览器的设置;
4、Apache设置DefaultCharset off。页面显示正常。
解决办法:
1 删除httpd.conf中的AddDefaultCharset
2 修改httpd.conf中的AddDefaultCharset为gbk
3 如果你使用的是虚拟主机,没有权限修改httpd.conf,那么可以在站点根目录里面创建一个.htaccess文件,写入以下内容:AddDefaultCharset off或者AddDefaultCharset GBK来解决