この間仕事で検証をしていた時にApache とPHP で構成されているサーバーでなぜかShift JIS で作られているサイトで文字化けしたのでその作業の備忘録として残したいと思います。
OS とミドルウェアのざっくりとした情報です。
■ OS
Alma linux 9
■ ミドルウェア
Apache 2.4.x 系統
PHP 8.X 系統
Shift JIS とは??
日本語を表現するための文字コードの一種です。最近は少なくなってきている気はしますが、日本語を例えばLinux とかで使用していて文字化けをするときのあれです。あれは日本語の文字コードが上手く変換されなくて、意味わからない漢字ばかりが並ぶ文字化けが起こってしまっています。
文字化けしてしまった原因は?
Shift JIS 自体をあんまり意識しないためか、Apache やPHP 側でその設定も意識したことがなかったです。でも実はApache でもDefault のcharacter を指定する設定があるらしく、その設定がデフォルトでUTF-8 などを設定していると文字化けが発生してしまいます。
apache の場合
httpd.conf の設定をみてください。
AddDefaultCharset utf-8
PHP の場合
php.ini の設定を確認してみてください。
default_charset = UTF-8
上のような設定になっていると思います。
curl -I https://hogehoge.com
=> UTF-8 のheader 情報も返ってくると思います
設定を変更してみる
apache の場合
httpd.conf の設定変更します。
AddDefaultCharset Off
PHP の場合
php.ini の設定を変更します。
# 空にする
default_charset = ''
今回はプログラム側で設定が難しそうだったのか、ミドルウェア単位で設定変更することになりましたが、default_charset を空にすることは公式では推奨していないらしいので、他のやり方があるならば、そのやり方やった方がいいですね。
もちろん、apache の設定反映のために、apache のrestart もしくはreload が必要なので、お忘れなく実施してみてください。
参考サイト