課題8




formdecode.html、formgetdecode.cgiを実行し、1つのページに3つの異なる文字 コードの文字が表示された場合、ブラウザがどのような挙動をするか確認せよ。 また、これを参考に、文字コードを統一(EUC,SJIS,JISいずれでも構わない)した 一言掲示板を作ってみよ。
formdecode.html、formgetdecode.cgiを実行し挙動を確認する。
data1にaいウぇO(←文字化けではありません。),data2に?/\(記号)を入れ、urlはhttp//www.yahoo.co.jpとし、好きな 色は赤とした。

実行すると、以下のようになった。

a

a

EUCコードの時だけ正しく表示されることが分かる。

formdecode.html

一言掲示板

一言掲示板は、rogfileの中身を表示するcgi(bbsread.cgi)と
fogfileに書き込みを行うhtml & cgi(bbswrite.html or cgi)の3つ。
読み込む、書き込むのように、処理でcgiを分けました。

一言掲示板のソース
File name:bbsread.cgi
1:#!/usr/bin/perl
2:print "Content-type:text/html\n\n";
3:require "cgi-lib.pl"; #cgi-lic.plを読み込む
4:require "jcode.pl"; #jcode.plを読み込む
5:&ReadParse;
6:$fn=logfile; %bbsのlogfile
7:open(LOG," < $fn")||die "erorro!\n"; # logfileをopen
8:@list=< LOG > ; # logfileの中身を配列に読み込む
9:close(LOG);
10:print "< html > \n";
11:print "< /head > \n";
12:print "< meta http-equiv=\"Content-Type\" content=\"text/html; charset=euc-jp\" > \n";
13:print "< title > 一言掲示板(仮) < /title > ";
14:print "< /head > \n";
15:print "< body >\n";
16:print " < center > \n";
17:print " < h2 > 一言掲示板(仮) < /h2 > ";
18:print " < a href=\"bbswrite.html\" > 書き込む < /a > ";
19:print " < hr > \n";
20:print " < /center > \n";
21:print " < font size=2 color=\"black\" > ";
22:#logfileの中身を表示させる。
23:for($i=0;$i < @list;$i++){
24: $s=$i+1;
25: ($name,$com,$color)=split(/\t/,@list[$i]);
26: &jcode'convert(*name,'euc'); # 文字コードを変換する
27: &jcode'convert(*com,'euc');
28: print "[$s] 名前 < font color=\"$color\" > $name < /font > : $com\n < hr > ";
29: }
30:print " < /font > ";
31:print " < /body > \n";
32:print " < /html > ";

3:〜4:cgi-lib.plとjcode.plを使うために読み込んでいる。
23:〜29:配列を最後まで繰り返して、配列の中身(名前、一言、名前の色)を出力していく

File name:bbswrite.cgi
#bbswrite.htmlから情報を受け取ってlogfileを編集するcgi
1:#!/usr/bin/perl
2:require "./cgi-lib.pl";
3:require "./jcode.pl";
4:&ReadParse;
#情報を受け取って、変数に代入
5:$data=$ENV{'QUERY_STRING'};
6:$name=$in{'name'};
7:$com=$in{'com'};
8:$color=$in{'color'};
9:print "Content-type:text/html\n\n";
10:print " < html > < head > \n";
11:print " < meta http-equiv=\"Content-Type\" content=\"text/html; charset=euc-jp\" > \n";
12:print " < title > 一言掲示板 < /title > \n";
13:print " < /head > < body > \n";
14:print " < h2 > 書き込み確認 < /h2 > < hr > \n";
15:
16:&jcode'convert(*name,'euc');
17:&jcode'convert(*com,'euc');
18:if($name ne "" && $com ne ""){
19: print "$name < br > ";
20: print "$com < br > ";
21: print "名前の色 : < font color=\"$color\" > $color < /font > < hr > ";
22: print " < hr > \n";
23: print " < a href=\"bbsread.cgi\" > 掲示板に戻る < /a > \n";
24: $fn=logfile;
25: open(LOG,"+ < $fn");
26: @bbs= < LOG > ;
#配列の一番上に新しく追加
27: unshift @bbs,"$name\t$com\t$color\n";
#logfileを一度初期化してから書き込み
28: truncate(LOG,0);
29: print LOG @bbs;
30: close(LOG);
31: }
#名前とコメントが書かれていなかったらエラーを表示
32:else{
33: print "エラー!名前を入力して下さい。or なにかしゃべって下さい < br > ";
34: print " < a href=\"bbsread.cgi\" > 掲示板に戻る < /a > \n";
35:}
36:print " < /body > < /html > \n";

5:〜8:bbswrite.htmlのformから受け取り、それぞれ変数に代入。
25:logfileを読み書き可能で開く
26:配列の一番上に新しく要素を追加する命令
27:logfileを一度0byteにする処理→logfileを初期化

File name:bbswrite.html
1: < html >
2: < head >
3: < meta http-equiv="Content-Type" content="text/html;charset=euc-jp" >
4: < title > 一言掲示板 < /title >
5: < /head >
6: < body >
7: < center >
8: < h2 > 一言書き込んで下さい。悪口はやめて < /h2 >
9: < hr >
10: < /center >
11: < form method="get" action="bbswrite.cgi" >
12:名前  ; < input type="text" name="name" size=60 > < br >
13:一言  : < input type="text" name="com" size=60 > < br >
14:名前の色 : < select name="color" size=1 >
15: < option value="black" > black
16: < option value="green" > green
17: < option value="gold" > yellow
18: < option value="red" > red
19: < option value="blue" > blue
20: < /select >
21: < input type="submit" value="書きこむ" >
22: < /form >
23: < /body >
24: < /html >


一言掲示板

indexに戻る
課題9