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

あまりスマートなやり方ではないですが、やむを得ない場合にはお試しあれ。
AIに仕事を奪われそうな人の集い

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

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

新着情報・お知らせCMS

中古車・車両在庫CMS

よくある質問(FAQ)CMS

スタッフ紹介、プロフィールCMS

受付状況・待ち人数CMS

掲示板(BBS)管理画面付

写真ギャラリーCMS

投票・アンケートシステム

テロップ・ニュースティッカーCMS

営業日カレンダーCMS

カレンダー予約フォーム

リンク集ページCMS

アクセスカウンター

ダウンロードカウンター

その他

AIに仕事を奪われそうな人の集い
フォーム制作ならお任せください
メールフォーム自動テスト送信
PHPレスキュー
メールフォームの各種カスタマイズならお任せ下さい
業務効率化が可能なPHPオリジナルCMS制作します

役立つかも?なもの

豆知識や役立ち事など

PHPについて

各種情報