• ベストアンサー

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'};

質問者が選んだベストアンサー

  • ベストアンサー
  • moon_piyo
  • ベストアンサー率60% (88/146)
回答No.1

回答ではありませんが、 「あ」を「%20%A0」に変換するというのではだめでしょか $a = "あ"; $a =~ s/([^a-zA-Z0-9*\-.@_])/sprintf("%%%02X", ord($1))/eg; $a =~ s/%20/+/g; print $a;

souta_n
質問者

お礼

回答ありがとうございました。 送信時エンコードしたものを受取ってデコードしたあと、もう一度エンコードするのですね。 なるほど使えます。・・・しかし結構むずかしい質問だったのかな?受取ったあとデコードしないというのは

その他の回答 (1)

noname#191236
noname#191236
回答No.2

こんばんわ。 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; } それでは。

souta_n
質問者

お礼

うぁ!cgi-lib.plの偉大さを知らされますね! 親切にコメントまで書いてくれてるのに、なんとのぉ~しかわからんぞ、 とりあえず#1の人の回答で乗り切り、時間のあるときにこの方法試してみます。ありがとうございました。

関連するQ&A