PHPの文字化けを直す方法

久しぶりに某サイトのPHPのアクセス・カウンターを見に行ったら、管理画面が文字化けしていました。どうやらサーバー会社がPHPの設定を無断で変えていたらしいです。クイッカなんですけどね。ひどいですね。まあ、安いサーバーはそんなものかもしれません。

元々、Shift_JISによるコーディングで文字がアウトプットされているはずだったのですが、たぶんUTF-8に変えられてしまったのではないかと思います。

サーバー会社に対応をお願いするのもいいですが、時間がかかり、効率が悪いので、自分でいじることにしました。

方法はいくつかあるのですが、どれがいいかはサーバーの設定次第です。クイッカでは初めての事態なので、取りあえず、手当たり次第にやることにしましたが、php.iniのファイルを書いて、アップロードすることで簡単に解決しました。

書いた内容は以下の通りです。

default_charset = Shift_JIS

これをテキスト・エディターで書いて、php.iniと言うファイル名で保存し、該当のPHPスクリプトのディレクトリーにアップロードしました。

ここで、今後のトラブル回避のために、保存時の文字コードをUTF-8に指定しました。それからアップロードです。アップロード先を間違えると動作しませんので、御注意下さい。PHPのスクリプトの置いてあるディレクトリーです。その上に置いても動作しません。

これをやってみて気がついたのですが、PHPの時間設定もUTCに変わっていました。ひどいですね。そこで、これもついでにphp.iniに書き込むことにしました。日本時間に設定です。

default_charset = Shift_JIS
date.timezone = Asia/Tokyo

結局、二行書くことになり、二度アップロードしたので、二度手間でした。

ちなみに他の方法はと言うと、.htaccessで設定する方法と、スクリプト自体に設定を書き込む方法があります。最後のが一番面倒です。

.htaccessでは

php_value default_charset "Shift_JIS"

・・・と書いてアップロードします。

タイムゾーンも一緒に設定するのなら・・・

php_value default_charset "Shift_JIS"
php_value date.timezone Asia/Tokyo

しかし、この方法でやってみて、500のInternal Server Errorがでたら、サーバーが対応していないので、あきらめてください。

最後のスクリプトに書く方法ですが、

ini_set('default_charset', 'Shift_JIS');

ついでに時間の設定は下記の通りです。

date_default_timezone_set('Asia/Tokyo');

但し、上のコードが使えるのはPHP 5.1.2以上です。PHP 5.1.1以下では下記のコードになります。

ini_set('date.timezone','Asia/Tokyo');

今のところ、このコードは5.1.2以上でも使える様です。PHP 7.2で動作することを確認しました。もしPHPのバージョンが分からなかったら、これを使ってもいいでしょう。

上記の出力文字コード指定とタイムゾーン指定のコードは先頭に書くようにしましょう。

たぶん、スクリプト内で設定する方法は100%成功するのではないかと思いますが、面倒ですね。

何か、この話は前に書いたことがあると思ったら、3月に書いていました。あちらは、Hawk Hostの場合です。興味のある方は、下記の関連ページのリンク先をご覧下さい。

関連ページ:
PHPの文字化けを直す

カテゴリーPHP