概要
PHP 5.5 以下から、PHP 5.6 以上に PHP をアップグレードした際、HTTP ヘッダーに Content-Type: "text/html; charset=UTF-8"
が追加され、文字コードが Shift_JIS などのサイトは文字化けしてしまう場合があります。
これは、php.ini に default_charset
の指定がないことが原因です。default_charset = "Shift_JIS"
などを追加することで、ヘッダーの Content-Type
で指定される文字コードを変更できます。
詳細
Shift_JIS の Web サイトをホスティングしている、レンタルサーヴァーの PHP ヴァージョンを 5.5 から 5.6 に上げたところ、Web サイトに文字化けが発生してしまいました。
<head>
の中には <meta charset="Shift_JIS">
が入っているので、HTML 側の文字コード指定は問題ないようです。
一方、HTTP ヘッダーの方を確認してみると、Content-Type
に text/html; charset=UTF-8
が指定されていました。
調べてみたところ、Content-Type
で指定される文字コードは、php.ini の default_charset
というパラメーターで指定することになっているようです。PHP 5.6 からデフォルト値が空から "UTF-8" に変更されています。
今までは空だったため、特に Content-Type
で charset
が指定されることもなく、このような問題が発生しなかったのだと思います。