Edited at

PHP 5.5 から 5.6 以上に上げると Shift_JIS や EUC-JP のサイトが文字化けする


概要

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-Typetext/html; charset=UTF-8 が指定されていました。

HTTP ヘッダー

調べてみたところ、Content-Type で指定される文字コードは、php.ini の default_charset というパラメーターで指定することになっているようです。PHP 5.6 からデフォルト値が空から "UTF-8" に変更されています

今までは空だったため、特に Content-Typecharset が指定されることもなく、このような問題が発生しなかったのだと思います。