PHPの文字化け対策!

 

桜も満開に近づいてきましたねー
お散歩大好き、ディレクターなかまゆです。

さてさて、本日はPHPのお話。
以前プログラムを触っていたこともあり、今もPHPなどのシステム系にかかわることが
あります。

先日、ある案件で遭遇。
弊社テストサーバーではなんともないのに、クライアントは
「¥マークがついてるんです!」としきりに言われ・・・。

さて、原因はなんだったんでしょう?

いろいろ調査をしてみたら、サーバーによって見え方が違うではないですか!
phpの場合、サーバーの環境によってPHPの設定が違ったりすることがあります。
この設定ファイルというのがphp.iniです。

今回の文字化けはこのphp.iniと深?く関係します。

php.iniの設定で、「Magic Quotes GPC」というのがあり、これがONになっていると、シングルコーテーション(')やダブルコーテーション(")、エスケープ文字(¥)などを文字列として使用したい場合に、自動的にエスケープ文字(¥)が付きます。

それは、PHPがシングルコーテーションなどが、命令の一部でなく、単なる文字列だと理解するためです。

この機能が shift-jis で作ったページになると、悪さをします。
特に、「表」「ソ」「申」「予」などの文字に影響をします。

これらに共通なのは、文字コード(Shift_JISコード)にすると、「XX5C」と後ろに「5C」が付く文字コードになります。この「5C」は単体でも文字を表しており、それが「¥」マークです。

php.iniの設定を変更することができるのであればいいのですが、レンタルサーバーだと設定ファイルが簡単に変更できなかったりします。

今回ご紹介するのは、プログラム内で回避する場合。
これらを回避するには、PHPプログラム内で、

if (get_magic_quotes_gpc()) {

}

などとして、そのサーバーのPHPの「Magic Quotes GPC」の設定を取得し、ONに
なっているならば、stripslashes()関数を使って、「¥」マークを除去してあげる必要がでてきます。

今回のポイントは、
・Magic Quotes GPCがONである
・Shift-JISのページである

という条件がそろって起こるトラブルです。

次回こんな文字化けがあったら、これで回避できますね!