CGI.pm を使わずにフォームデータを受け取って表示するソースメモ。
チェックボックスやマルチセレクトのように複数の値が送られてくるものには対応しておらず、ファイルアップロードにも対応してません。
CGI のデータの入出力には CGI.pm を利用することを強く推奨します。これはあくまで習作です。
#!/usr/bin/perl use strict; print <<End_of_Header; Content-Type: text/html; charset=euc-jp <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=euc-jp"> <title>CGI</title> </head> <body> End_of_Header my $query; if ($ENV{'REQUEST_METHOD'} eq 'GET') { # GET $query = $ENV{'QUERY_STRING'}; } elsif ($ENV{'REQUEST_METHOD'} eq 'POST') { # POST if ($ENV{'CONTENT_LENGTH'} > 10240) { er("なげーよ。"); } read(STDIN,$query,$ENV{'CONTENT_LENGTH'}); } else { er("対応していないメソッドです。"); } # split my %data; foreach (split /&/,$query) { my ($k,$v) = split /=/; $data{decode($k)} = decode($v); } # print print "<table border=\"1\">\n"; print "<tr><th>KEY</th><td>VALUE</td></tr>\n"; foreach (keys %data) { print "<tr><th>" . escape($_) . "</th><td>" . escape($data{$_}) . "</td></tr>\n"; } print "</table>\n"; footer(); # SUB sub decode { my $data = shift; $data =~ tr/+/ /; $data =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg; $data =~ s/\x0D\x0A/\n/g; $data =~ tr/\x0D\x0A/\n\n/; return $data; } sub escape { my $data = shift; $data =~ s/&/&/g; $data =~ s/</</g; $data =~ s/>/>/g; $data =~ s/"/"/g; $data =~ s/'/'/g; $data =~ s/\n/<br>/g; return $data; } sub er { my $msg = shift; print "<strong>$msg</strong>\n"; footer(); } sub footer { print "</body>\n</html>\n"; exit; }
0 件のコメント:
コメントを投稿