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

jackxiang 2010-5-28 09:57 | |
    前面说到我放弃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-8 .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-8 .html
</Files>
通过以下配置,可以实现同样的效果:


<Files "example.html">
    ForceType 'text/html; charset=UTF-8'
</Files>
我们也可以使用正则表达式为多个文件指定编码。例如:


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

<FilesMatch ".(htm|html|css|js)$">
    ForceType 'text/html; charset=UTF-8'
</FilesMatch>
注:需要注意的是配置参数的顺序对于结果起到重要的作用。比如在配置文件中有如下设置:


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



繁体的:
照著 Jedi 翻譯的 Moveable 安裝手冊,會幫您做好
UTF-8 編碼必備的設定及更新,進入管理模式及寫文章都正常,但是可能會發生發布出去的文章在瀏覽器上看變成亂碼的問題。

這時就是 Apache 的預設 Charset 要改為 utf-8 了,只要修改 httpd.conf 裡的:

AddDefaultCharset utf-8

如此所有的網頁都會以預設 UTF-8 來瀏灠,但是問題來了!


1.如果你的網站裡的其它網頁都是 big5 怎麼辦?
2.虛擬主機商也不可能為了你一個網站改他主機預設的 charset

這時只要設定 httpd.conf 中您發布文章的目錄設定即可:

<Directory "/var/www/html/mt">
AddDefaultCharset utf-8
</Directory>

若是您是虛擬主機,您也可以請您的主機商在 Directory 目錄比照做此設定:

<Directory "/home/yourname/public_html">
AddDefaultCharset utf-8
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

若是您的 public_html 內有其它 big5 的網站,就要請您的虛擬主機商另外再幫您的 Moveable 開一個 Directory 設定囉!

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/3112/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2010-5-28 10:00
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]