「ディスパッチベース」のロゴ画像

.htaccessで簡単に文字化け対策する方法

文字化けを回避する.htaccessの設定

WEBサイト制作中、ページプレビューしていると文字化けすることがある。 これは、ブラウザが前に見ていたサイトの文字エンコーディングを引きずり、誤った文字コードでページを表示してしまった時に発生する。

この現象は、<meta http-equiv="content-type" content="text/html; charset=utf-8">と記述していても起こるので、サーバーレベルで対処しなければならない。

やり方は簡単で、下記の1行を .httaccess に追加するだけ。

.htaccess

AddDefaultCharset UTF-8

注意事項

.htaccess をルートディレクトリに設置した場合、 全てのページが指定した文字コードで出力される。通常のHTMLと、CGIページのエンコードが異なる場合は、 各々のディレクトリに.htaccessを設置しなければならない。

追記:2020年3月23日 特定のApacheのバージョンにバグがある

バージョンの詳細は伏せますが、AddDefaultCharsetを設定しても文字エンコードがHTTPヘッダに反映されないApacheのバグがある事を確認しました。

2.2系でも2.4系でも、とあるマイナーバージョンでバグがあります。

バグがないバージョンでAddDefaultCharsetを設定した場合のHTTPヘッダ戻り値

Content-Type: text/html; charset=utf-8

バグがあるバージョンでAddDefaultCharsetを設定した場合のHTTPヘッダ戻り値

Content-Type: text/html

バグがあるバージョンではAddDefaultCharsetを設定しても「charset=xxx」がHTTPヘッダに追加されないので、文字化けを解消することができません。

AddDefaultCharsetが効かないバージョンでのバグ回避策

面倒ではありますが、.htaccessに拡張子ごとに下記のような記述を追加することで文字化けを解消できます。

.htaccess

<FilesMatch "\.html$">
	Header set Content-Type 'text/html; charset=utf-8'
</FilesMatch>

上記の例は拡張子「.html」に対する設定です。正規表現を用いているので、<Files ~ >よりも<FilesMatch>が推奨されています。
参照:Apache 公式ドキュメント<Files> ディレクティブ項

▲ページ先頭に戻る

Apache

ApacheでWEBシステムを運用する際の便利な技を公開しています。

-
記事公開日:
記事更新日:2020年03月23日