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ページに、ていねいな解説がありました。
まさしく、私の疑問にずばりと答えるものでした。
他にも、有用な記事がでており、大変参考になります。
どうもありがとうございました。

[上に] [前に] [次に]