ワープロ松
[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データのエンコードとして
「スペースはプラス(+)に置きかえる」
と、なっています。
上記のサブルーチンではどちらもその処理は行っていません。
どうするのが、正しいのでしょうか?