とあるエンジニアの闇歴史帳

コピペで使える便利Wiki ※現在構築中です。

ユーザ用ツール


perl:cgi_query1

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

perl:cgi_query1 [2017/12/14 20:18]
perl:cgi_query1 [2020/06/23 14:10] (現在)
行 1: 行 1:
 +====== クエリーを受け取る1 - Perl,CGI ======
 +~~socialite~~
 +<note important>この記事は2006年02月16日に書かれたものです。</note>
 +
 +CGIモジュールは非常に巨大なため、引数を受け取るときには軽量・コンパクトなプログラムを書きたい場合がある。
 +
 +===== サンプル =====
 +<code perl>
 +#--------------------------------------------------#
 +#             クエリーをデコードし取得             #
 +#--------------------------------------------------#
 +util::getQuery(\%form);
 +
 +package util;
 +#-------------------------------------------------#
 +#■クエリーを取得する
 +#    内容:GET/POST判定をしクエリーを取得する。
 +#          URLデコード後、指定のハッシュへ格納する。
 +#
 +#    引数:(1)格納先ハッシュ:リファレンス
 +#  戻り値:なし
 +#-------------------------------------------------#
 +sub getQuery{
 +    my $form = shift;     #クエリーをセットするハッシュ(リファレンス)
 +    my $buff;
 +    my @pairs;
 +    my $pair;
 +
 +    #-- クエリー文字列取得 --#
 +    if ($ENV{'REQUEST_METHOD'} eq "POST"){
 +        read(STDIN, $buff, $ENV{'CONTENT_LENGTH'});
 +    }
 +    else{
 +        $buff = $ENV{'QUERY_STRING'};
 +    }
 +
 +    #-- name=valueの組み合わせに分ける --#
 +    @pairs = split(/&/, $buff);
 +    # $buffは
 +    #     name1=value1&name2=value2& ... &nameN=valueN
 +    # となっているハズ
 +
 +    #-- デコードしつつハッシュにセット --#
 +    foreach $pair ( @pairs ){
 +        my( $name, $value ) = split(/=/, $pair);
 +         #$pairは name=value となっているハズ
 +
 +        #-- URLデコード --#
 +        $value =~ tr/+/ /;    #“+”を空白に
 +        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
 +        # %XX を本来の文字コードに
 +
 +        #-- ハッシュにセットする --#
 +        if( exists( $form->{$name} ) ) {
 +            $form->{$name} .= "," . $value;  #同名の場合は','で連結する
 +        }
 +        else{
 +            $form->{$name} = $value;
 +        }
 +    }
 +
 +}
 +</code>
 +
 +===== 関連書籍 =====
 +{{amazon>jp:4797336803}}
 +<html><p style="clear:both"></p></html>
 +
 +{{amazon>jp:4274068765}}
 +<html><p style="clear:both"></p></html>
 +
 +{{amazon>jp:B00ISP0OM8}}
 +<html><p style="clear:both"></p></html>
 +
 +{{tag>CGI・Perl例文集 Perl CGI クエリー}}
 +~~socialite~~
  

関連ページ