上周飞龙新版上线的时候,出现了一个问题由于原来的页面是用的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的参考手册,原来是这样的。
说明 |
当应答内容是text/plain 或text/html 时,在HTTP应答头中加入的默认字符集 |
语法 |
AddDefaultCharset On|Off|charset |
默认值 |
AddDefaultCharset Off |
作用域 |
server config, virtual host, directory, .htaccess |
覆盖项 |
FileInfo |
状态 |
核心(C) |
模块 |
core |
当且仅当应答内容是text/plain
或text/html
时,此指令将会在HTTP应答头中加入的默认字符集。理论上这将覆盖在文档体中通过<meta>
标签指定的字符集,但是实际的行为通常取决于用户浏览器的设置。AddDefaultCharset Off
将会禁用此功能。AddDefaultCharset On
将启用Apache内部的默认字符集iso-8859-1
。您也可以指定使用在IANA注册过的字符集名字中的另外一个charset 。比如说:
AddDefaultCharset
只 应当在如下情况下使用:所有文本资源都使用同一种确定的字符集,且分别标记他们的字符集非常麻烦。一个这样的例子是向包含动态内容的资源中添加字符集参数 (比如先前遗留的CGI脚本),这样可能会因为在输出中包含用户提供的数据而导致跨站点脚本攻击。但是请注意:更好的解决办法是修改或删除这些脚本,因为 设置了默认的字符集以后将会使得浏览器的字符集自动探测功能失效。
原来这个是给那种没有申明编码的页面用的。如果你的站点只有一种编码就可以使用这个指令,如果有两种就不能用了。那就是还记得将所有的页面都加上好合适的编码头申明。