- - PR -
Request.QueryString で%が消える
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2009-02-25 23:24
いつもお世話になっております。
VS2003でASP.NETアプリを触っております。 画面遷移時における遷移先アドレスの、クエリ文字列部分の暗号化の仕組みを考えました。 例えば、本来 xxxx.aspx?userid=0001&pageid=10 となる部分を、暗号化することで xxxx.aspx?query=f9r385ud8wi9ei30e9ie93i のように、useridやpageidといった複数の項目の情報がqueryという 1つのQueryStringアイテムに暗号化して詰め込めたら良いな、と考えました。 そこで、新たなクラスを作り、 (1)項目名と値に関しては、半角1文字に対して英数2文字に変換する。 (2)& や = といった元のクエリ文字列におけるセパレータは、半角1文字に置き換える。 という機能を盛り込みました。 で、やっと本題なのですが、(2)において試行錯誤していた中で、% や + を変換後の 文字列にすると、> に化けたり、半角のブランクになったりしました。 %に関して言えば、= の代わりに使うと化けるのに、& に使った場合はちゃんと表示され ます。 いずれの場合も、暗号化直後はちゃんと表示されているのに、遷移先で Request.QueryString("query") で取ってきた段階で化けています。 他の文字で置き換えれば済む話なので、特別困っているわけでもないのですが、 気になったので質問させていただきました。どうしてこのような現象になるのか、 ご存知の方がいらっしゃいましたらお教えください。よろしくお願いします。 |
|
投稿日時: 2009-02-25 23:30
URLにおける、%や+の役割を調べて下さい。
http://ja.wikipedia.org/wiki/URL%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89 |
|
投稿日時: 2009-02-26 16:43
Azulean様
ご回答いただきありがとうございます。 URIには+や%が使えない、とありますね。そう言われれば、なるほど、そうなのねぇ、 と今さらながらに納得しております。恥ずかしい話ですが。 でも、Encode後の文字列には使えるんですよね。となると、そもそもEncodeとは 何ぞや?ってところから掘り下げないといけないので、これから調べます。 ありがとうございました。 |
|
投稿日時: 2009-02-26 23:29
URLに含めたい文字があっても、URLで使えない文字があるとします。
その文字を特定のルールで変換して、URLで使える文字で表現することをエンコード(符号化)と言います。 URLのエンコードでは、半角スペースを+に、特殊な意味を持つ%と+と&と=等とURLに使えない文字を%aa というように%と16進数で置き換えます。 ※+は半角スペースを意味するため、&や=は区切りを意味するため、%はそれに続く2文字で1バイトを意味するため。 %aa(%と16進数)で1バイトを表すというのが一般的なルールであるため、QueryStringではエンコードの逆、デコードをすることで、%aa は 元の1バイトに、+は半角スペースに復元されます。 この動作を知らないと、確かに文字化けしたと思うかもしれませんね。 |
1