分享java带来的快乐

我喜欢java新东西

关于Apache的AddDefaultCharset的问题

上周飞龙新版上线的时候,出现了一个问题由于原来的页面是用的GBK编码的。新版的面页使用了utf-8编码的。晚上部署的时候发现utf-8编码的全部都成乱码了。这个乱码是因为浏览器用gbk解析utf-8的网页的。手动选择一下用utf-8编码就正常的了。刚开始还以为是utf-8页面的问题。看html源码。里面有utf-8的头申明。看jsp里面也有的。为什么Apache就是不用utf-8发送给浏览器呢?
后来找到httpd.conf.发面里面的AddDefaultCharset设置的是

AddDefaultCharset=GBK

没办法先修改成UTF-8试试

AddDefaultCharset=UTF-8

这样的话utf-8的页面好了。可是gbk的又不行了。真是怪了。后来发现把这个设置成off就可以了。

AddDefaultCharset=off

一查Apache的参考手册,原来是这样的。

AddDefaultCharset 指令

说明 当应答内容是text/plaintext/html时,在HTTP应答头中加入的默认字符集
语法 AddDefaultCharset On|Off|charset
默认值 AddDefaultCharset Off
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
状态 核心(C)
模块 core

当且仅当应答内容是text/plaintext/html时,此指令将会在HTTP应答头中加入的默认字符集。理论上这将覆盖在文档体中通过<meta>标签指定的字符集,但是实际的行为通常取决于用户浏览器的设置。AddDefaultCharset Off 将会禁用此功能。AddDefaultCharset On 将启用Apache内部的默认字符集iso-8859-1 。您也可以指定使用在IANA注册过的字符集名字中的另外一个charset 。比如说:

AddDefaultCharset utf-8

AddDefaultCharset只 应当在如下情况下使用:所有文本资源都使用同一种确定的字符集,且分别标记他们的字符集非常麻烦。一个这样的例子是向包含动态内容的资源中添加字符集参数 (比如先前遗留的CGI脚本),这样可能会因为在输出中包含用户提供的数据而导致跨站点脚本攻击。但是请注意:更好的解决办法是修改或删除这些脚本,因为 设置了默认的字符集以后将会使得浏览器的字符集自动探测功能失效。

原来这个是给那种没有申明编码的页面用的。如果你的站点只有一种编码就可以使用这个指令,如果有两种就不能用了。那就是还记得将所有的页面都加上好合适的编码头申明。

posted on 2011-02-10 10:11 强强 阅读(1938) 评论(0)  编辑  收藏 所属分类: web技巧


只有注册用户登录后才能发表评论。


网站导航: