sub decode_form { # 機能 # フォームのデコード(URLデコード) # 引数 # なし # 関連項目 # $ENV{'REQUEST_METHOD'} 送信方法(GET/POST) # $ENV{'QUERY_STRING'} 送信文字列(GETの時のみ有効) # $ENV{'CONTENT_LENGTH'} データ長(POSTの時のみ有効) # STDIN 送信文字列(POSTの時のみ有効) # 返却値 # $FORM{名前} フォームの名前(name)に対する値 local($buf, @pairs, $pair, $key, $val); # データの取得 if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buf, $ENV{'CONTENT_LENGTH'}); } else { $buf = $ENV{'QUERY_STRING'}; } # '+' を スペースに変換 $buf =~ tr/+/ /; # '&' で値を分離 @pairs = split(/&/, $buf); foreach $pair (@pairs) { # 名前(key)と、値(val)に分離 ($key, $val) = split(/=/, $pair); # 16進文字列(%XX) から 文字へ変換 $val =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/ge; # 改行データの統一(\n) $val =~ s/\r\n/\n/g; $val =~ s/\r/\n/g; # 値の前後に空白がある場合、削除 $val =~ s/^\s+//o; $val =~ s/\s+$//o; # FORM変数に格納 $FORM{$key} = $val; } } 1;