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 | の | 実 | 験 |