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

忙しい人のための(ry

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 で指定される文字コードを変更できます。

kwsk

未だに弊社 (※前職; 2017年11月追記) には Shift_JIS の Web サイトなんてものが存在し、泣きながらコードをいじっております。

今回、レンタルサーヴァーの PHP ヴァージョンを 5.5 から 5.6 に上げてみたのですが、Web サイトに文字化けが発生してしまいました。

一応 <head> の中には <meta charset="Shift_JIS"> なんてものが入っているので、HTML 側の文字コード指定は問題なさそうです。

となると考えられるのはヘッダーでしょうか。

tetete2.png

ブラウザーのディヴェロッパーツールで見てみると、確かに Content-Typetext/html; charset=UTF-8 なんてものが指定されています。

さて、どうしてこんなことになってしまったのでしょうか?

色々と調べてみると、Content-Type で指定される文字コードは、php.ini の default_charset というパラメーターで指定できるようです。
PHP 5.6 からデフォルト値が空から "UTF-8" に変更されているようですね。今までは空だったので、特に Content-Typecharset が指定されることもなかったので、特に指定しなくても問題がなかったのでしょう。
マニュアルにも書かれていました。

ひとまずこれで一件落着です。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.