2.3 パラメータの取得-1

CGIへパラメータを渡す方法は2つあります。
GETとPOSTです。
GETは環境変数に、パラメータを置きます。
POSTは標準入力へパラメータを渡します。
それぞれについて、具体的な例を用いて説明します。

<GET>


<POST>


まず、このページのHTMLソースコードを覗いてください。
<FORM action="tst_para.cgi">と<FORM method="POST" action="tst_para.cgi">の2つのFORMタグがありますね。
最初のほうはmethodが定義されていません。
methodが定義されていない場合は「GET」と解釈されます。
「action="〜"」は起動したいCGIプログラムの名前を記述します。

tst_para.cgiのプログラムコード
#!/usr/local/bin/perl5
#パラメータの取得
if ($ENV{'REQUEST_METHOD'} eq "POST") {

    read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
else{

   $buffer = $ENV{'QUERY_STRING'};
}
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD>\n";
print "<TITLE>パラメータの取得</TITLE>\n";
print "</HEAD>\n";
print "<BODY>\n";
print "$buffer<BR>\n";
print "</BODY>\n";
print "</HTML>\n";


#環境変数からMETHODを判定
#POSTである
#この場合、長さ分だけ標準入力からパラメータを読み込む


#GETである
#この場合、環境変数からパラメータを読み込む

ではそれぞれ実行ボタンを押してみてください。
提示したプログラムが実行されます。


実行結果を見ると、意外な結果でしたね。
POSTの実験結果は、入力文字を変更しなければ下記のように出力されたはずです。
post_txt=POST%82%CC%8E%C0%8C%B1
実は、ブラウザからCGIへパラメータを渡すとき、コードの変換が行われます(エンコード)。
変換規則は次のとおりです

この規則を元に、取得したパラメータを実際の文字コードに変換します(デコード)。

今回取得したパラメータは次のように解釈します。

取得したパラメータ post_txt=POST %82%CC %8E%C0 8C%B1
文字コード種 ASCIIコード シフトJISコード シフトJISコード シフトJISコード
実際の文字 post_txt=POST

戻る 次へ