ShitJISでの開発だりー。ShitJISでの開発だりー。

<< | コメント(3) | トラックバック(0) このエントリーを含むはてなブックマーク >>

今まで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でエスケープさせるもよし。

煮てよし、焼いてよし。

トラックバック(0)

トラックバックURL: http://exe.tyo.ro/mt/mt-tb.cgi/660

コメント(3)

あとMYSQL系のPHP函数も、
SHIFT-JISでセキュリティホール出来たよね(^ω^)

Shift-JISなんて滅びればいのに。

なんで滅びないんだろう。

はやくUnicodeに統一しようぜ。

そうだなヽ(´ー`)ノ
自分で開発するのは、殆ど うにこーど にしているよ(^ω^)

コメントする

2014年10月

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

月別 アーカイブ

2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年