今までPHPの開発=EUC-JPだったんですよ。
昔Javaのシステム開発してた時はUTF-8でした。
でも今の開発現場はCVSとの互換性のためにShift-JISなんですよね。
パソコンって入れると、パャRンって出るの。
もうやだー。
まぁShiftJISの文字化けってのはいろいろなバリエーションがある気がしますが、コレが一番オーソドックスかしら。
ソは文字コードだと%83%5cなんだけど、%5cって\(エスケープ文字)の文字コードなんだよね。
他にも良く使う字だと、貼とか表とか十とか予とか能も%5c入ってるから化ける。
どんな状況でも化けるのかといえばそういうわけじゃなくて、プログラムが原因なんだよね結局。
でもEUCやUTFだったら意識しなくてもいい所なんだよね。
PHPの設定でmagic_quotes_gpcってのがあって、コレがonだとformの入力(GET,POST,COOKIE)の' , ",\,NULLが\でエスケープされて渡るんですよね。
で、それを取り除くためにstripslashesを使ったりするわけですよ。
でも、そのプログラムをmagic_quotes_gpcがオフのサーバーに移動させたりするとバグが出てくるわけだ。
\ないのに\取ろうとするから、文字の中の%5cが除かれてしまう。
php.iniは一般的にはonになってるけど、セキュアなphp.iniはoffになってたりと違う場合がある。
サーバー管理者が設定変えてる場合もある・・・。
まぁそれはともかくstripslashesが2重に使われたりしてもアウト。
\を取り除いてるのに、更にやるから文字の中の%5cが取り除かれる。
中でどうなってるのかっつーと、
「パソコン」だと
%83%70、%83%5c、%83%52、%83%93ですが、%5cが抜けるので
%83%70、%83、%83%52、%83%93になる。
すると
%83%70、%83%83、%52、%83%93と認識されて、%83%83がャ、%52がRになります。
EUCやUTFだとありえないよね。
開発で使いたくないよね。
解決方法は結局magic_quotes_gpcの設定の確認とstripslashesの使用箇所の把握が大事。
今回はベースが俺が組んだプログラムじゃなかったのが更にだるいw
どこに使ってるかわからんwww
また、magic_quotes_gpcの設定はget_magic_quotes_gpcでプログラム側から取得できるので、そこで分岐させると設定に依存しないプログラムが組めます。
その時はstripslashesでonの時にはずすのもよし、offの時にaddslashesでエスケープさせるもよし。
煮てよし、焼いてよし。
あとMYSQL系のPHP函数も、
SHIFT-JISでセキュリティホール出来たよね(^ω^)
Shift-JISなんて滅びればいのに。
なんで滅びないんだろう。
はやくUnicodeに統一しようぜ。
そうだなヽ(´ー`)ノ
自分で開発するのは、殆ど うにこーど にしているよ(^ω^)