パーセントエンコーディングについて

119 views
Skip to first unread message

arai0112

unread,
May 19, 2012, 10:24:51 PM5/19/12
to 「体系的に学ぶ 安全なWebアプリケーションの作り方」サポートML
arai0112と申します。

基本的な話ですみません。
「4-2.入力処理とセキュリティ」の「リスト/42/42-001.php」の呼び出しについて、サンプルソースでは、
http://example.jp/42/42-001.php?name=%8ER%93c
と記述されていますが、Shift-JISで「山田」を表すなら
http://example.jp/42/42-001.php?name=%8E%52%93%63
だと考えました。どちらも正しく「山田」が表示されますがこれはどういう作用なのでしょうか?よろしくお願いいたします。

徳丸浩

unread,
May 22, 2012, 2:28:35 AM5/22/12
to wasbook...@googlegroups.com


2012年5月20日日曜日 11時24分51秒 UTC+9 arai0112:

徳丸浩

unread,
May 22, 2012, 2:56:02 AM5/22/12
to wasbook...@googlegroups.com
arai0112 さん、こんにちは。回答が遅くなり申し訳ありません。

「4-2.入力処理とセキュリティ」の「リスト/42/42-001.php」の呼び出しについて、サンプルソースでは、 
http://example.jp/42/42-001.php?name=%8ER%93c 
と記述されていますが、Shift-JISで「山田」を表すなら 
http://example.jp/42/42-001.php?name=%8E%52%93%63 
だと考えました。どちらも正しく「山田」が表示されますがこれはどういう作用なのでしょうか?よろしくお願いいたします。  

ということですが、哲学的なことを言い出せば色々あるでしょうが、即物的には両者は同じ結果となります。
というのは、アプリケーションの起動時にPHPの処理系がパーセントエンコードされた文字をデコードするので、%52と文字 R は同じもの(値0x52のバイト値)に変換されます。アプリケーションから両者を区別することは通常ありません。生のURLを参照すれば区別できますが、通常そこまでする必要はないと思います。

ちなみに、サンプルのURLは、実際のブラウザ(IE、Chrome、Safari)でフォームを作成して、Shift_JISの「山田」をGETメソッドで送信させた場合のクエリ文字列を使っていますので、「本来どうあるべきか」はとかもく、「実際にブラウザが送ってくる形式」です。
 
以上、回答とさせていただきますが、論点がずれているとか、まだ分かりにくいなど疑問が残るようであれば、再度質問してください。

2012年5月20日日曜日 11時24分51秒 UTC+9 arai0112:

arai0112

unread,
May 24, 2012, 8:11:13 AM5/24/12
to 「体系的に学ぶ 安全なWebアプリケーションの作り方」サポートML
こんばんは。
徳丸さん、ご回答ありがとうございます。

哲学的とかそんな高尚なことではなく、ただ自分がWebアプリ開発経験がなくそのような書き方ができることを知らなかっただけです。お恥ずかし
い...
お手数おかけしました。ありがとうございました。

Reply all
Reply to author
Forward
0 new messages