- ベストアンサー
perlで受取ったパラメータをバイトコードのまま変数に代入
HTMLフォームの、name=aのテキストボックスに「あ」と入力しCGIにSubmitすると、a=%82%A0とバイトコードに変換されわたされますよね 受け側のCGIで下記の様にそのパラメータを$aに代入すると、$aには「あ」となって代入されるのですが、あえて「あ」ではなくバイトコードの「%82%A0」で代入するようにするには、どうしたらよいのでしょうか? #!/usr/local/bin/perl require 'cgi-lib.pl'; require 'jcode.pl'; &ReadParse; $a=$in{'a'};
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
回答ではありませんが、 「あ」を「%20%A0」に変換するというのではだめでしょか $a = "あ"; $a =~ s/([^a-zA-Z0-9*\-.@_])/sprintf("%%%02X", ord($1))/eg; $a =~ s/%20/+/g; print $a;
その他の回答 (1)
こんばんわ。 cgi-lib.plはフォームデコード用のライブラリですから、 それを通してデコードされるのは普通の動作ですよね。 自分でデコードというか、受取データを処理しましょう。 (それか再エンコードする。) #まず、POSTかGETかを判定します。 #次に、フォームから送られてくるデータを取得して、 #バッファに入れます。 if ($ENV{'REQUEST_METHOD'} eq "POST") { if ($ENV{'CONTENT_LENGTH'} > 51200) {exit;} read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } elsif ($ENV{'REQUEST_METHOD'} eq "GET") { $buffer = $ENV{'QUERY_STRING'}; } #受取ったデータをフォーム毎に分割し連想配列に入れる。 @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $FORM{$name} = $value; } それでは。
お礼
うぁ!cgi-lib.plの偉大さを知らされますね! 親切にコメントまで書いてくれてるのに、なんとのぉ~しかわからんぞ、 とりあえず#1の人の回答で乗り切り、時間のあるときにこの方法試してみます。ありがとうございました。
お礼
回答ありがとうございました。 送信時エンコードしたものを受取ってデコードしたあと、もう一度エンコードするのですね。 なるほど使えます。・・・しかし結構むずかしい質問だったのかな?受取ったあとデコードしないというのは