PHP工房トップ

HOME > News&Tips一覧ページ > PHP5.6以上(PHP7含む)でShift_JIS、EUCのPHPファイルが文字化けする

PHP5.6以上(PHP7含む)でShift_JIS、EUCのPHPファイルが文字化けする

2016/01/07

PHP5.6以上(PHP7含む)の場合、拡張子が.phpの場合で、文字コードがShift_JIS、またはEUC-JPの場合、PHPが絡んでいようがいまいが文字化けしてしまうようです。(要するにそのファイルにHTMLだけが記述されていたとしても)

もちろんmetaタグのContent-Typeで「charset=shift_jis」などを指定していたとしてもだから余計に厄介。

おそらくデフォルトcharset(default_charset)がUTF-8に変わったせいだろう。

metaタグやファイルの文字コードが間違いなくても文字化けするのでハマる可能性が高いと思う。
(あえてheaderで書いていないケースも多いと思うので)

解決法としては、単純にheader関数で明示的に文字コードを指定すれば解決できた。

以下1行をソース上の一番上の行(DOCタイプ宣言の更に上)に記述すればOK。
※EUC-JPの場合は適宜変更下さい。

<?php header("Content-Type:text/html;charset=shift_jis");?>

ページが多い場合にはphp.iniの設定を変更するか、PHPのバージョンを5.5以下にするか、または100ページ以下くらいであれば、この際すべてのファイルの文字コードをUTF-8にしてしまうのも有りだと思います。(ただし何らかのシステムが入っている場合にはこの辺も考慮する必要があります)

まぁ時代の流れとしてUTF-8が標準となり、Shift_JISはPHPとの相性も非常に悪いため特に理由がなければ、Webで扱うファイルはすべてUTF-8で統一して運用するのが無難ということですね。
※まぁそんなことは分かっていてもそうもいかない状況も稀にあるんですがね・・・。

2017/3/29 追記
さらに厄介な案件に出くわしました。。。
PHP5.6にバージョンアップしたところ、文字化けしたとのご相談。

他社が作ったシステムで、バックエンド(管理画面)側がUTF-8、フロント(表示)側の文字コードがShift_JISというケース。

さらにどこにどんだけページがあるのかが分からないので、全ファイルを書き換えるのは現実不可能だし危険。。。さて困った。。。

htaccessでdefault_charsetを変更しようにも上述のとおりサイト全体で文字コードが統一されていないので無理。。。

そこで、htaccessでdefault_charsetを「none」に設定することで解決?できたっぽい。
それまでのデフォルトは「none」だったのでまぁ副作用などは無いと思われる。

以下を記述したhtaccessファイルを設置すればOKでした。
php_value default_charset none

あまりスマートなやり方ではないですが、やむを得ない場合にはお試しあれ。

PHPメールフォーム(無料版)

PHPメールフォーム(有料版)

新着情報・更新履歴CMS(無料版)

投票・アンケートシステム(無料版)

テロップCMS(無料版)

写真ギャラリーCMS(無料版)

営業日カレンダーCMS(無料版)

営業日カレンダーCMS(有料版)

カレンダー予約フォーム(無料版)

カレンダー予約フォーム(有料版)

リンク集ページCMS(無料版)

アクセスカウンター(無料版)

ダウンロードカウンター(無料版)

その他

メールフォームの各種カスタマイズならお任せ下さい
業務効率化が可能なPHPオリジナルCMS制作します

役立つかも?なもの

豆知識や役立ち事など

PHPについて

各種情報