apache同时支持GBK和UTF-8编码

    前面说到我放弃IIS全面转向apache了,随后因为小丫头的出生,一直都比较忙,也没空仔细检查。这两天稍微闲了点,让我发现居然有两处乱码问题:一处是后台编辑文章处的“热门标签”,中文标签全部乱码;另一处则是安装的WP-RecentComments插件,在侧边栏首页显示正常,但一点下一页后就会变乱码了。   
    经过查询得知都是因为apache编码设置的问题,因为原本我服务器上的apache上运行的一套系统文件编码是gb2312,httpd.conf中设置AddDefaultCharset gb2312,从而导致wp中某些模块无法正常以utf-8编码解析。折腾了一下午,总算是解决了让apache同时支持GBK和UTF-8编码。
    以下为具体解决方法:
    1、httpd.conf中设置AddDefaultCharset off,并在原gb2312编码系统所设置的虚拟主机字段中加入AddDefaultCharset gb2312。
    2、注释掉php.ini文件中的default_charset = “gb2312”
    3、重启apache服务,搞定!

    以下为转贴:

使用AddCharset变量将字符编码应用到指定后缀名的当前目录以及子目录的所有文件上。比如,为所有后缀名为.html的文件指定UTF-8字符编码,我们可以在.htaccess文件中加入一下代码:


AddCharset UTF
-.html

后缀名可以是包括或者省略前面的”.”. 我们也可以在一行中同时指定多个后缀名。在一般情况下,最好将Apache的默认字符编码设置为UTF-8;


AddDefaultCharset utf
-8

AddDefaultCharset可以为On/Off或者任何在IANA注册的,在MIME介质类型中使用的字符值。当且仅当响应的content-type是text/plain或text/html时,它会为介质类型字符参数指定默认的值。这个值会覆盖在响应中通过META指定的字符集,当然最后的行为还要取决于用户使用的客户端/游览器设置。当AddDefaultCharset为Off时,将关闭这个功能;设置为On时,将使用默认的字符集iso-8859-1;或为AddDefaultCharset指定可选的字符集比如UTF-8。
通过使用AddType也可以实现字符编码设置,这个参数会同时指定字符编码和MIME类型。


AddType 
'text/html; charset=UTF-8' html

在Apache中,我们也可以为某一个特定的文件设置字符编码。比如,我们希望在一个文件夹中,只对文件example.html使用UTF-8,而其他文件仍然是用默认编码。我们可以编辑这个文件夹下的.htaccess文件,并添加如下内容:


<Files "example.html">
     
AddCharset UTF-.html
</Files>

通过以下配置,可以实现同样的效果:


<Files "example.html">
    
ForceType 'text/html; charset=UTF-8'
</Files>

我们也可以使用正则表达式为多个文件指定编码。例如:


<FilesMatch ".(htm|html|css|js)$">
    
AddCharset UTF-.html
</FilesMatch>

<FilesMatch ".(htm|html|css|js)$">
    
ForceType 'text/html; charset=UTF-8'
</FilesMatch>

注:需要注意的是配置参数的顺序对于结果起到重要的作用。比如在配置文件中有如下设置:


AddCharset UTF
-.utf8
AddCharset windows
-1252 .html

在这种配置下,文件example.utf8.html将使用windows-1252,而example.html.utf8将使用UTF-8字符编码;

  • 请问.htaccess文件本身应该保存为什么编码呢?ANSI还是UTF-8?

    • Looki

      这个,据我测试貌似两种编码都行

      • Ning

        不知为何我把.htaccess文件保存为UTF-8,就是 500 错误。 这说明apache 根本不认UTF-8是吧?我想使用中文url,所以必须把文件保存为UTF-8编码。请问我用什么办法解决这个问题?谢谢

        • 可能是你虚拟主机或服务器的问题,应该和apache无关

          • Ning

            谢谢提醒

  • 请问.htaccess文件本身应该保存为什么编码呢?ANSI还是UTF-8?

    • Looki

      这个,据我测试貌似两种编码都行