トップ > Perl Tips > getでの入出力


 ■ getでの入出力

今回は入力されたデータをデコード(文字化けを直す)して出力します。

・get
http://...../xxx.cgi?名前1=値1&名前2=値2
というようにデータを渡す方法。
このデータは環境変数QUERRY_STRINGにセットされます。

という特徴があります。

<サンプル>


#!/usr/bin/perl

require 'jcode.pl';
$data=$ENV{'QUERY_STRING'};

$data =~ tr/+/ /;
$data =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1) )/ge;
&jcode'convert( *value, 'sjis' );

($name,$mail)=split(/&/,$data);
($name1,$name2)=split(/=/,$name);
($mail1,$mail2)=split(/=/,$mail);

print "Content-type: text/html\n\n";
print "名前:$name2 メール:$mail2";


<解説>
今回は「名前」と「メール」という項目を受け取ります。

#!/usr/bin/perl
 これはおなじみです。Perlのパスです。

require 'jcode.pl';
 jcode.pl という、文字化けを直して日本語として
 読めるようにするものを読み込むためのです。
 こちらからダウンロードできます。

$data =~ tr/+/ /;
$data =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1) )/ge;
&jcode'convert( *value, 'sjis' );
 $data =~ tr/+/ /;では「+」を半角スペースに戻します。
 $data =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1) )/ge;
 で、その他の文字をデコードします。
 &jcode'convert( *value, 'sjis' );
 では、先ほど読み込んだ jcode.pl を使って、文字コードを
 Shift JISになおします。

1. ($name,$mail)=split(/&/,$data);
2. ($name1,$name2)=split(/=/,$name);
3. ($mail1,$mail2)=split(/=/,$mail);
 順番に説明していきます。
 1番では、受け取ったデータ(name=***&mail=***)を
 name=*** と mail=*** に分けます。
 2・3番では、上で分けたデータをさらに下のように分解していきます。
 name1=name(変数の左側)と name2=***(変数の右側)に分けます。
 3番も同様に分けます。

print "Content-type: text/html\n\n";
print "名前:$name2 メール:$mail2";
 name2・mail2(それぞれのデータ=変数の右側のデータ)
 を表示させます。


続いてHTMLの送信するためのフォームを作りたいと思います。


<HTML>
<BODY>
 <FORM ACTION="***.cgi" METHOD="GET">
 投稿者<INPUT TYPE="text" NAME="name"><BR>
 E-mail <INPUT TYPE="text" NAME="mail"><BR>
 <INPUT TYPE="submit" VALUE="送信">
 <INPUT TYPE="reset" VALUE="リセット">
 </FORM>
</BODY>
</HTML>

<FORM ACTION="***.cgi" METHOD="GET">
の ***.cgi はCGIファイル名にしてください。

アップロードして、枠に何か文字を入れて送信すると、
名前:*** メール:***
と出ます。

サンプルはこちらです。




トラックバック

このエントリーのトラックバックURL:
http://easycgi.xrea.jp/mt-tb.cgi/32