古いサーバーで古いコンテンツのメンテをしていると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が文字化け)...



