CGIデータのエンコードについて
[上に]
[前に]
[次に]
ワープロ松
[E-Mail]
[HomePage]
2000/05/29(月) 22:41:10
CGIデータのエンコードについての疑問です。
PerlのCGI用のモジュールの、CGI_Lite.pmとCGI.pmとでURLのエンコードの
方法が違っています。
CGI_Lite.pmではサブルーチンurl_encodeで、
s/([\x00-\x20"#%;<>?{}|\\\\^~`\[\]\x7F-\xFF])/
sprintf ('%%%x', ord ($1))/eg;
となっており、
CGI.pmではサブルーチンescapeで、
s/([^a-zA-Z0-9_.-])/uc sprintf("%%%02x",ord($1))/eg;
となっています。
この2つ、結果は明らかに違います。
CGI.pmのescapeの方が正しいように思えるのですが、どうでしょうか?
また、とほほ氏の「CGIの仕様」のページを見ると、CGIデータのエンコードとして
「スペースはプラス(+)に置きかえる」
と、なっています。
上記のサブルーチンではどちらもその処理は行っていません。
どうするのが、正しいのでしょうか?
S-pore
[HomePage]
2000/05/30(火) 00:50:56
> また、とほほ氏の「CGIの仕様」のページを見ると、CGIデータのエンコードとして
> 「スペースはプラス(+)に置きかえる」
> と、なっています。
> 上記のサブルーチンではどちらもその処理は行っていません。
原理的には %20 でも問題ないような。
(厳密にこれでも正しいといえるのかどうかは知りませんが。)
Syn
[E-Mail]
2000/05/30(火) 10:46:10
URL エスケープとフォームエンコードは別物です。
http://www.din.or.jp/~ohzaki/perl.htm#JP_Escape
ワープロ松
[E-Mail]
[HomePage]
2000/05/30(火) 21:16:39
[[解決]]
SynさんのWebページに、ていねいな解説がありました。
まさしく、私の疑問にずばりと答えるものでした。
他にも、有用な記事がでており、大変参考になります。
どうもありがとうございました。
[上に]
[前に]
[次に]