WEB

今どきのApacheにて文字コードShif-JISでページを表示したい

古いサーバーで古いコンテンツのメンテをしているとShif-JISのページが生きていたりします。

本番サーバーは古いけど、ステージングサーバーは新しいような場合、Shif-JISのページが文字化けしたりします。

原因

新しいApacheのWebサーバーではDefault Charasetが「UTF-8」になっていることが多いです。その状態でShif-JISで表示したいHTMLやPHPのページを表示しようとすると文字化けします。HTMLソース上に「charset=shift-jis」を指定していても、サーバーのDefaultが優先されるのでUTF-8で表示しようとして文字化けているのです。

対処

根本的にはhttpd.confの設定で以下のようにします。

vi /etc/httpd/conf/httpd.conf
---------------------------
AddDefaultCharset UTF-8
---------------------------
↓↓↓
---------------------------
AddDefaultCharset Off
---------------------------

何らかの理由でconfがいじれない場合は、.htaccessに以下の(1)か(2)か(3)を追記、または組み合わせて追記をすればShift-JIS表示が可能になります。

#(1)
AddDefaultCharset shift-jis
#(2)
AddType "text/html; charset=shift-jis" .html .php
#(3)
<FilesMatch "\.(php|html)$">
Header set Content-Type 'text/html; charset=shift-jis'
</FilesMatch>

 

2021年に、CGIの文字コードのお話を(Shift-JISのCGIが文字化け)...
reiko suzuki
SIerでのERPシステム開発職からWebデザイン会社のエンジニアに転職、出産後育休中の2021年にGRIに合流しました。子育てしながら在宅勤務で、Webサービスのシステム開発を行っています。AWSとWordPressが好きです。GRIの部活ではグルメ部とクリエイティ部に所属しています。
データ分析・AIの専門家集団 GRI