CentOSのyumでインストールしたApacheでは、レスポンスに追加されるメディアタイプの文字セットパラメータがUTF-8に設定されているため、metaタグでUTF-8以外のcharsetを記述していても、ブラウザで無視されてWebアプリケーションやHMTLが文字化けします。
文字化けが起こる原因は、AddDefaultCharset
ディレクティブにUTF-8が設定されていることなので、httpd.conf
に記述されているAddDefaultCharset
の設定自体をコメントアウトします。
vi /etc/httpd/conf/httpd.conf
---------------------------
#AddDefaultCharset UTF-8
---------------------------
AddDefaultCharset
自体のデフォルト値はOff
のため、コメントアウトすることでOff
を設定したことと同じになります。Off
にしたことを明示したい場合は、次の様に記述すると良いでしょう。
AddDefaultCharset Off
文字化けの原因
実際にこの設定で何が変わるのかを見ていきましょう。AddDefaultCharset
の設定をUTF-8、Offにした場合のレスポンスヘッダにおけるContent-Type
の変化を示します。
UTF-8と設定した場合
$ curl -I 192.0.2.10
HTTP/1.1 200 OK
Date: Mon, 17 Mar 20XX 11:34:27 GMT
Server: Apache
Last-Modified: Mon, 17 Mar 20XX 07:42:00 GMT
Accept-Ranges: bytes
Content-Length: 125
Connection: close
Content-Type: text/html; charset=UTF-8 <= charsetが必ず表示される
Offと設定するかコメントアウトした場合
$ curl -I 192.0.2.10
HTTP/1.1 200 OK
Date: Mon, 17 Mar 20XX 11:34:41 GMT
Server: Apache
Last-Modified: Mon, 17 Mar 20XX 07:42:00 GMT
Accept-Ranges: bytes
Content-Length: 125
Connection: close
Content-Type: text/html <= charsetが表示されない
レスポンスヘッダのContent-Type
の文字コードがUTF-8となっていると、HTMLのmetaタグに設定されている文字コードがブラウザによって無視されるため、文字コードのミスマッチがあると文字化けが起こることになります。
ドキュメント: Apache AddDefaultCharset ディレクティブ