上周飛龍新版上線的時候,出現了一個問題由于原來的頁面是用的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腳本),這樣可能會因為在輸出中包含用戶提供的數據而導致跨站點腳本攻擊。但是請注意:更好的解決辦法是修改或刪除這些腳本,因為 設置了默認的字符集以后將會使得瀏覽器的字符集自動探測功能失效。
原來這個是給那種沒有申明編碼的頁面用的。如果你的站點只有一種編碼就可以使用這個指令,如果有兩種就不能用了。那就是還記得將所有的頁面都加上好合適的編碼頭申明。