[PHP-users 12762] URLエンコードされた文字列に対する処理

Naoto Arai php-users@php.gr.jp
Thu, 23 Jan 2003 15:30:41 +0900


みなさまはじめまして。新井と申します。

困った事が起こってしまい、調査・検証を繰り返してみてみたものの、
根本の原因を突き止める事ができず、みなさまのお力をお貸しして頂ければ
と思い、投稿させて頂きました。



内容は、
「URLエンコード形式の文字列が、勝手にデコードされてしまう」
というものです。



フォームより入力された文字列を
単純にHTML出力するだけのスクリプトを作成し、
フォームから "$" という文字を入力したとします。
この場合、表示される文字は、当然 "$" です。

#HTTP_RAW_POST_DATAの中身は "%24"


しかし、"%24" を入力した場合、
本来なら、"%24" という文字列が表示されるべきなのに、
"$" が表示されてしまいます。

#HTTP_RAW_POST_DATAの中身は "%2524"


RAWデータの中身を見ても判るように、
明らかに、後者はURLエンコードされた文字列に対する
デコード処理が2回行われています。



これだと、例えば
「100%A4サイズです」という(意味不明な)文字列を入力しても、
"%A4" 部分にデコード処理が施され、
「100、サイズです」と表示されてしまいます。



PHPのバージョンは、4.2.3

Configureオプションに、
--enable-mbstr-enc-trans
--enable-mbstring
は含まれています。

また、
HTTP入力はSJIS
内部エンコードはEUC-JP
HTTP出力はSJIS
となっています。





このような現象に関する情報をお持ちの方がいらっしゃいましたら、
是非ともアドバイスをお願いします。


宜しくお願い致します。




--
Naoto Arai <arai@init.co.jp>