• ベストアンサー

perl/CGIでの自作掲示板のJcode設定??

まだまだperlいじって3,4日の者です。 10日でおぼえる~シリーズの本を買って、現在掲示板を自作しているのですが、 ローカルにApache入れてActivePerlで作ってて、殆ど動作しますし、普通に書き込み 出来るのですが、フォームの文字は普通に出力?されているのですが、 フォームの送信ボタンを押して、下に書きこまれると文字化けして全く読めません… 参考書ではShift_JISで説明が行われていましたが、その通りやってもさっぱり表示が化けて ネットで色々調べても流石にと言いますかそんな初歩的な事をなかなか見つけられず 困っております。 記述としては #! c:/perl/bin/perl ↓最初の方で指定して require "jcode.pl"; #=========================== ユーザー設定 ==== $CHARSET = 'Shift_JIS'; # 文字コード $DATAFILE = './board.dat'; # 記事ファイル $PAGEVIEW = 5; # ページ記事数 $MAXLINE = 100; # 最大記事数 #======================= メインプログラム ==== loadFormdata(); # 記事データの読み込み open(FILE, "<$DATAFILE") or printErrorPage("記事ファイルが開けません。"); eval{ flock(FILE, 1) }; @DATA = <FILE>; close(FILE); if($FORM{'mode'} eq 'write') { writeArticle(); # 書き込みモード # 記事データの書き込み open(FILE, ">$DATAFILE") or printErrorPage("記事ファイルが開けません。"); eval{ flock(FILE, 2) }; print FILE @DATA; close(FILE); } printPage(); exit; #========================== 記事ページ出力 ==== sub printPage { my $begin = $FORM{'page'} * $PAGEVIEW; my $end = $begin + $PAGEVIEW; if($end > @DATA) { $end = @DATA; }              埋め込みHTMLは、代入?して ↓    print <<END; Content-type: application/xhtml+xml; charset=$CHARSET <?xml version="1.0" encoding="$CHARSET"?>   ←一応ここも <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head><title>掲示板</title></head> <body>  : :一部割愛 : # 記事の出力 my ($i, $nextpage, $nextlink); for($i = $begin ; $i < $end ; ++$i) { my ($data, $title, $author, $email, $text) = split(/\t/, $DATA[$i]); print "<h2>$title</h2>\n"; if($email) { print "<strong>"; print "<a href=\"mailto:$email\">$author</a>"; print "</strong>"; } else { print "<strong>$author</strong>"; } print " [ $date ] "; print "<p>$text</p>"; print "<hr />\n"; } # 次ページへのリンク if($end < @DATA) { $nextpage = $FORM{'page'} + 1; $nextlink = "$ENV{'SCRIPT_NAME'}?page=$nextpage"; print "<p><a href=\"$nextlink\">NEXT PAGE</a></p>\n"; } print <<END; </body> </html> END }                 :                 : 一部割愛                 : #=============== フォームデータ取り込み ===== sub loadFormdata                   ←取り込み全文      {                                 ↓ my ($query, $pair); if($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; } foreach $pair (split(/&/, $query)) { my ($key, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F] [0-9a-fA-F])/chr(hex($1))/eg; $value = jcode::sjis($value); ←出来ればeucに直したい(基本サイトをeuc-jpで作成) $value =~ s/&/&amp;/g;      直す以前に化けてますが… $value =~ s/</&lt;/g;              この最後で指定をしてます。 $value =~ s/>/&gt;/g; $value =~ s/\x0D\x0A/<br>/g; $value =~ tr/\t/ /; $FORM{$key} = $value; } } cgiの一番最後の方に書いてあるのですがこの本にはこれしか書いて無くて、 他のサイト様だと何だか全く違う表現が一般的?jcode::convert(\$value,'euc'); これでもさっぱりダメでした… ちなみにブラウザもしっかりとHTMLに指定しているeuc-jpで表示しております。 あと既に送信してから仮保存ディレクトリの中のだんかいで既に文字化けしております。 このプランしか知らないものでどこをどういじれば良いのかがさっぱりわかりません… 使用エディタはTeraPadで、euc-jp書き出し、保存に設定しています。 良い解決策が有ればよろしくお願い致します

  • CGI
  • 回答数2
  • ありがとう数21

質問者が選んだベストアンサー

  • ベストアンサー
  • ryu_chan
  • ベストアンサー率37% (69/186)
回答No.2

No.1のkmeeさんが言及されてますように、コードの例がちょっと古いですね。 use strict; use warnings; のないコードはまず古いですね。レキシカル変数を使ってスコープを限定しないコードも古いです。リファレンスで済むところを型グロブを使うコードも古いです。 私の所有している本は以下です。 CGIプログラミング http://www.amazon.co.jp/dp/4873110440 これも古いのですが、まだ通用する本でお薦めです。 ただ、少し難しいかもしれません。 初心者用の良い書籍を紹介できないのが残念ですが、 サンプルコードによるPerl入門 http://d.hatena.ne.jp/perlcodesample/ の木本さんが書かれた かんたんプログラミング CGI/Perl http://www.amazon.co.jp/dp/4774139289 なら幾分ましかもしれません。 Perlについてなら定評のある結城浩さんの本がいいのではないでしょうか。 新版Perl言語プログラミングレッスン入門編 http://www.amazon.co.jp/dp/4797336803 上記2点の本は拝見したことがないので、はっきりと推薦はできませんが、お持ちの書籍よりはましかと思われます。 以下のオライリーの本は評価が高いです。かなりやる気があるのならこれがお薦めですが、ご自分で中身を確認されてからご検討ください。 初めてのPerl 第5版 http://www.amazon.co.jp/dp/4873114276 書籍を選ぶ最低限のポイントとしてサンプルコードに use strict; の記述があるのをお選びください。 余談はこれぐらいにして(Perlカテゴリで似たような質問があったため御託を並べてしまいました)、質問への回答をしたいと思います。 以下2点、ご確認お願いします。 まず、この↓行を削除(コメントアウト)したらどうなりますでしょうか? $value = jcode::sjis($value); ←出来ればeucに直したい(基本サイトをeuc-jpで作成) 次に、 loadFormdata(); を、 use CGI; %FORM = CGI->new->Vars; にしたらどうなりますでしょうか?

abacabu
質問者

お礼

上記修正をして、XHTML1.0をHTML4.01にしたらちゃんと表示するようになりました。やはりXHTMLという性質上CGIには組み込めないのでしょうか?? $value =~ s/\x0D\x0A/<br>/g; これをXHTMLの<br />に換えるとエラーが出てしまいました。 もう少ししっかり勉強してみようと思います。 参考書、購入の際には参考にさせていただきます。 ありがとうございました。

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

まず、確認ですが http://www.seshop.com/product/detail/6160/ この本でしょうか? 私は未見ですが、2005年となると、既に古くて現状に合っていないと思われます。 まずは、新しい本で、Perl、CGI、HTMLそれぞれ基本を身につけるのが先ではないでしょうか。 > require "jcode.pl"; jcode.pl は現在でも一部では使われていますが、既に古いやりかたとなっています。 Jcode.pmモジュールを経て、現在は標準のEncodeモジュールを使うのが基本です。

abacabu
質問者

お礼

回答ありがとうございます。 やはり古いですよね… その本です。だいぶ前に買ってそろそろHTMLCSS当たりが ある程度使えて来てるのでそろそろCGIでもやろかと、未使用のこれにてやっておりました。 やはり新しい本を買った方がよいのでしょうかね? いまはEncodeということでそのあたりで対処出来るか調べてみます。ちなみにPerlの記述自体には新しいとか古いとかあるんですかね? ありがとうございました

関連するQ&A

  • Perl BBS 掲示板 改行処理

    改行処理について教えてください。 今まで書き込み処理で unshift @DATA, "$tm,$FORM{'name'},$FORM{'title'},$FORM{'text'}\n"; としていたのですが、これを use CGI; my $form = new CGI; my $NAME = $form->param('name'); my $TITLE = $form->param('title'); my $TEXT = $form->param('text'); unshift(@DATA,"$tm,$NAME,$TITLE,$TEXT\n"); に変更しました。 すると sub loadFormdata が聞かなくなり、 改行処理他が対応しなくなってしまいました、 この場合、 loadFormdataの部分のどこを変えればよいでしょうか? |------書き込み処理------| sub printdata{ use CGI; my $form = new CGI; &loadFormdata(); open(FILE, "<$FILE"); eval{ flock(FILE, 1) }; @DATA = <FILE>; close FILE; my $tm = time; my $NAME = $form->param('name'); my $TITLE = $form->param('title'); my $TEXT = $form->param('text'); unshift(@DATA,"$tm,$NAME,$TITLE,$TEXT\n"); while(@DATA > $MAX) { pop @DATA; } open(FILE, ">$FILE") or die("error :$!"); eval{ flock(FILE, 2) }; print FILE @DATA; close FILE; } |------改行処理他------| sub loadFormdata { my ($query, $pair); if($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; } foreach $pair (split(/&/, $query)) { my $key = ("$NAME,$TITLE,$TEXT"); my ($key, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg; $value =~ s/&/&amp;/g; $value =~ s/</&lt;/g; $value =~ s/>/&gt;/g; $value =~ s/\x0D\x0A\s*/<br>/g; $value =~ s/\s+/ /; $FORM{$key} = $value; } }

    • ベストアンサー
    • Perl
  • perlがうごきません

    <html> <head> <title>form3</title> </head> <body> <form action="form3.cgi" method="post" name="form3"> <input type="text"name="form3"> <input type="submit"value="送信"> </form> </body> </html> ::::::::::::::::::::::::::::::: #! /usr/bin/perl if($ENV{"REQUEST_METHOD"} eq "GET"){ $str=$ENV{QUERY_STRING"}; }else{ read(STDIN, $str, $ENV{"CONTENT_LENGTH"}); } $str=~ tr/+/ /; $str=~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("c", hex($1))/eg; foreach(split(/&/, $str)){ my ($key, $value)=split(/=/, $_); $data{$key}=$value; } print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head><title>form3</title></head>\n"; print "<body>$data{'form3'}</body>\n"; print "</html>\n"; exit; :::::::::::::::::::::::::::::::: どうしてもうごきません。 どこかスクリプトがまちがっているのでしょうか。 パールのパスはあっています。

    • ベストアンサー
    • Perl
  • CGI間のデータ送信について(perl)

    perlのcgiで詰まってしまったので質問します。 現在困っていることは、cgiからcgiへの変数の値の受け渡しについてです。 色々調べてやってみたのですが、うまくいきません。 送信側で print "<form action = \"sendmail.cgi\" method=\"post\">"; print "<A href =\"sendmail.cgi?$array1[0]&$array1[1]&$array1[2]&$array1[3]\">sendmail.cgi</A>"; print "<input type=\"submit\" value=\" ボタンです。 \">"; print "</form>"; として 受信側で # postでもgetでも受信できるようにする if ($ENV{'REQUEST_METHOD'} eq "GET") { $data = '1'; $testmsg = "GETで受信"; $formdata = $ENV{'QUERY_STRING'}; print("$formdata<BR>"); } elsif ($ENV{'REQUEST_METHOD'} eq "POST"){ # こちらを使用している $data = '2'; $testmsg = "POSTで受信"; $length = $ENV{'CONTENT_LENGTH'}; read(STDIN,$formdata,$ENV{'CONTENT_LENGTH'});# $dataに受信する print("$formdata<BR>"); } else { $data = '3'; $testmsg = "受信することができませんでした。<BR>"; } としてpostにて受信しようとしています。 postのif文には入ったようなのですが、データが空っぽで何も入っていないようなのです。 何が原因なのでしょうか?助けてほしいです。

    • 締切済み
    • CGI
  • perl cgi 文字コード変換について

    掲示板でログファイルへの書き出しの際に文字コードをshift-jisに変更したいのですが, #投稿された値を受け取る if ($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $alldata, $ENV{'CONTENT_LENGTH'}); } else { $alldata = $ENV{'QUERY_STRING'}; } foreach $data (split(/&/, $alldata)) { ($key, $value) = split(/=/, $data); $value =~ s/\+/ /g; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1))/eg; $value =~ s/\t//g; $in{"$key"} = $value; } #ヘッダの表示 print "<html>\n"; print "<head><title>掲示板</title></head>\n"; print "<body>\n"; #受け取ったデータをファイルに書き込む if ($in{'handle'} ne '' && $in{'message'} ne '') { if (open(FH, "bbs.txt")) { @file = <FH>; close(FH); use CGI; $cgi=new CGI; $name1=$cgi->param('handle'); $name2=$cgi->param('number'); use Encode; use Encode::Guess qw(euc-jp shiftjis 7bit-jis); encode("shiftjis",decode('Guess',$name1)); encode("shiftjis",decode('Guess',$name2)); unshift(@file, "$name1\t$name2\n"); ##この部分で if (open(FH, ">bbs.txt")) { print FH @file; close(FH); } else { print "<p>ファイルに書き込めません。</p>"; } } else { print "<p>ファイルを読み込めません。</p>"; } } #投稿フォームの表示 print "<form method=\"post\" action=\"bbs.cgi\">\n"; print "<p>\n"; print "ハンドルネーム<br>\n"; print "<input type=\"text\" name=\"handle\" size=\"20\" value=\"\"><br>\n"; print "メッセージ<br>\n"; print "<input type=\"text\" name=\"message\" size=\"20\" value=\"\">\n"; print "</p>\n"; print "<p><input type=\"submit\" value=\"送信する\"></p>\n"; print "</form>\n"; #記事の一覧表示 if (open(FH, "bbs.txt")) { while ($data = <FH>) { ($handle, $message) = split(/\t/, $data); print "<p>\n"; print "投稿者:$handle<br>\n"; print "メッセージ:$message\n"; print "</p>\n"; } } else { print "<p>ファイルを読み込めません。</p>"; } #フッタの表示 print "</body>\n"; print "</html>\n"; exit; このような感じでかいたのですが文字コードを変更し,unshift(@file, "$name1\t$name2\n");と記述すると何も書かれずに空白になってしまいます..なぜでしょうか?困っています.教えて下さい. ちなみにunshift(@file, "$in{'handle'}\t$in{'message'}\n"); と文字コードの変更を意識しなかった場合にはちゃんとファイルに書かれています. jcode.plなどは使わずにencodeで行いたいです.

    • ベストアンサー
    • Perl
  • CGI(Perl)を作ったがうまく実行されない

    度々すみません。 ~~~~HTML~~~~ <FORM action="test.cgi" method="POST" NAME="FORM"> <div>最大攻撃力:<INPUT type="text" NAME="att"><br></div> <div>防御力:<INPUT type="text" NAME="def"><br></div> <div>クリティ時与ダメ:<INPUT type="text" NAME="cyo"><br></div> <div>クリティ時被ダメ:<INPUT type="text" NAME="chi"><br></div> <div>EXD時与ダメ:<INPUT type="text" NAME="eyo"><br></div> <div>EXD時被ダメ:<INPUT type="text" NAME="ehi"><br></div> <INPUT type=submit value="実行"> <INPUT type=reset value="リセット"></TD> </FORM> ~~~~CGI~~~~ #! c:/perl/bin/perl if($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; } foreach $pair(split(/&/,$query)) { ($l_set,$value) = split(/=/,$pair); $form{$l_set}=$value; } $att=$form{'$att'}; $def=$form{'$def'}; $cyo=$form{'$cyo'}; $chi=$form{'$chi'}; $eyo=$form{'$eyo'}; $ehi=$form{'$ehi'}; $hi=int((($chi*2+$def)+(($ehi*2+$def)/1.2))/2); $yo=int(((($att-$cyo*2)*2)+(($att*1.2-$eyo*2)*2))/2); print <<END; Content-type: text/html <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN"> <html> <head><title>被ダメテスト</title></head> <body><p>相手攻撃力は約<b>$hi</b>です。</p> <p>相手防御力は約<b>$yo</b>です。</p></body> </html> END このまま数値を入力して実行しても、「0」と出てきてしまいます。 読み込み(代入?)が出来ていないのでしょうか? 間違えている部分があればご指摘ください。 ※コンパイラはApacheです。

    • ベストアンサー
    • Perl
  • CGIファイル1つで掲示板

    1つだけのファイルで一覧型の掲示板を作っています。 HTMLを表示するのもそれです。 フォームで送信すると、自分のファイル自身にアクセスします。 $ENV{'CONTENT_LENGTH'}は受け取ることができたけど read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); では$bufferは空っぽでした。 1つのファイルでPOSTデータの送受信をするのは requireを使わないと無理ですか?

    • ベストアンサー
    • CGI
  • クッキーについて

    以下はperlにcookieが含まれている例です。(長くてすみません)結局、フォームに書き込んだ項目がクッキーによってすぐ表示されるということです。この場合、別のファイルで項目を取得するにはどうすればよいでしょうか。 #! c:/perl/bin/perl require "jcode.pl"; #============================ ユーザー設定 ==== $CHARSET = 'Shift_JIS'; # 文字コード $DATAFILE = './board.dat'; # 記事ファイル 中略 $COOKIE_PREFIX = 'simplebbs'; # クッキープリフィクス $COOKIE_LIFE = 10; # クッキー期限(日) #======================== メインプログラム ==== loadFormdata(); loadCookie(); # 記事データの読み込み open(FILE, "<$DATAFILE") or printErrorPage("記事ファイルが開けません。"); eval{ flock(FILE, 1) }; @DATA = <FILE>; close(FILE); if(exists $FORM{'mode'}) { if($FORM{'mode'} eq 'write') { writeArticle(); # 書き込みモード } 中略 # 削除モード } # 記事データの書き込み 中略 printPage(); exit; #========================== 記事ページ出力 ==== sub printPage { my $begin = $FORM{'page'} * $PAGEVIEW; my $end = $begin + $PAGEVIEW; if($end > @DATA) { $end = @DATA; } printHttpHeader(); print <<END; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head><title>けいじばん</title></head> <body> <h1>掲示板</h1> <form action="$ENV{'SCRIPT_NAME'}" method="POST"> 名前:<input type="text" name="author" size="40" value="$COOKIE{'author'}"><br> 電子メール:<input type="text" name="email" size="40" value="$COOKIE{'email'}"><br> 題名:<input type="text" name="title" size="60"><br> 内容:<textarea cols="60" rows="5" name="text"></textarea><br> <input type="hidden" name="mode" value="write"> <input type="submit" value="書き込み"> <input type="reset" value="リセット"> </form> <hr> <form action="$ENV{'SCRIPT_NAME'}" method="POST"> END # 記事の出力 my ($i, $nextpage, $nextlink); for($i = $begin ; $i < $end ; ++$i) { 中略 } # 次ページへのリンク 中略 #========================== 記事を書き込む ==== sub writeArticle { my @wdy_str = ('日', '月', '火', '水', '木', '金', '土'); my ($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime(time); my $date = sprintf("%4d年%02d月%02d日(%s) %02d:%02d", $year + 1900, ++$mon, $mday, $wdy_str[$wday], $hour, $min); unshift @DATA, 中略 $COOKIE{'author'} = $FORM{'author'}; $COOKIE{'email'} = $FORM{'email'}; } #========================== 記事を削除する ==== 中略 #======================== HTTPヘッダー出力 ==== sub printHttpHeader { # グリニッジ標準時の文字列 my @mon_str = ( 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'); my @wdy_str = ( 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); my ($sec, $min, $hour, $mday, $mon, $year, $wday) = gmtime(time + ($COOKIE_LIFE * 24 * 60 * 60)); my $date = sprintf("%s, %02d-%s-%04d %02d:%02d:%02d GMT", $wdy_str[$wday], $mday, $mon_str[$mon], $year + 1900, $hour, $min, $sec); # ヘッダーの出力 my ($name, $value); print "Content-type: text/html; charset=$CHARSET\n"; foreach $name (keys %COOKIE) { $value = $COOKIE{$name}; $name = "${COOKIE_PREFIX}_$name"; $value =~ s/(\W)/sprintf("%%%02X", ord($1))/eg; print "Set-Cookie: $name=$value; expires=$date\n"; } print "\n"; } #======================== エラーページ出力 ==== 中略 #================== クッキーデータ取り込み ==== sub loadCookie { my $pair; foreach $pair (split(/;\s*/, $ENV{'HTTP_COOKIE'})) { my ($name, $value) = split(/=/, $pair); if(not $name =~ /${COOKIE_PREFIX}_(.+)/) { next; } $name = $1; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg; $COOKIE{$name} = $value; } } #================== フォームデータ取り込み ==== sub loadFormdata { my ($query, $pair); if($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); 中略

  • perlのcgiが文字化けします。

    perlを使ったcgiを作ろうと思い、こんなプログラムを書いてみたのですが、htmlのタグに囲まれた部分の日本語が文字化けしてしましいます。ファイルの文字列は上手く表示できるのですが… どうすればいいでしょうか。 文字コード判別をしてみたところ、このプログラム自体はShift-JISで書かれているようです。 開いているファイルはutf-8のようです。 #!/usr/bin/perl #ヘッダの表示 print "Content-Type: text/html; charset=utf-8\n\n"; print "<html>\n"; print "<head><title>掲示板</title></head>\n";#これが文字化け print "<body>\n"; print "<input type=\"text\" name=\"mail\" size=\"20\" value=\"\"><br>\n"; print "メッセージ<br>\n";#これも文字化け my $File = 'party0339.html'; if (-e $File) { #####@ファイルを開く…上でファイルが存在してることを確認して開けない場合はエラーメッセージ open(FF,"<:utf8",$File) or die "ファイル:$File を開けない $! \n"; my @FILE = <FF>; close (FF); ####@読み込んだデータを$Dataに格納する foreach (@FILE) { $Data = $_; print "$Data<br>\n"; } } #フッタの表示 print "</body>\n"; print "</html>\n"; exit (); 対策や原因などを教えてくださるとありがたいです。よろしくお願いします。

  • perlの質問

    #!/usr/local/bin/perl require 'jcode.pl'; # 漢字コード変換ライブラリ #********** データを受け取る $query = $ENV{ 'QUERY_STRING' }; &parse_param( $query ); $name = $param{ 'name' }; # 投稿者 $email = $param{ 'email' }; # メールアドレス #********** 結果の出力 print "Content-type: text/html\n\n"; print "投稿者:".$name."<BR>"; print "メールアドレス:".$email; exit; #********** 入力したデータの分解 ********** sub parse_param {  local( $name, $value );  local( $parse_data ) = @_;  @in_params = split( /&/, $parse_data );  foreach $in_param ( @in_params ) {   ( $name, $value ) = split( /=/, $in_param );   $value =~ tr/+/ /;   $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1) )/ge;   &jcode'convert( *value, 'sjis' );   $param{ $name } = $value;  } } の $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack の部分だけ、何の処理をしているかがいまいちわかりません。 わかる方お願いします。

    • ベストアンサー
    • Perl
  • 半自作cgiが思うように動作しません。

    HTMLページから、$Dataというファイル名を持って来て、 このcgiで、$Data.jpgとなり、 その画像を、新しいウインドウ(サイズ指定)で表示させたいのです。。。 このcgiで新しくウインドウを開き、何かしらをクリックさせてから、サイズ指定のウインドウで画像を表示させるのはできるのですが、 クリックさせずに、しかも、最初に開いたウインドウは勝手に閉じさせたいのですが、 どこをどう直せばいいのでしょうか? #! /usr/bin/perl print "Content-type: text/html\n\n"; $Data = $ENV{'QUERY_STRING'}; $tail = ".jpg"; &header; print "<SCRIPT LANGUAGE='JavaScript'>\n"; print "function newwindow(imgurl) {\n"; print "nwin = window.open('img/$Data$tail\', 'Newwindow','width=300,height=210');\n"; print "nwin.document.open();\n"; print "nwin.document.write(\"<html><head>\")\; \n"; print "nwin.document.write(\"</head><body><img src=\"img/$Data$tail\'>\")\;\n"; print "nwin.document.write(\"<br><INPUT type='BUTTON' value='CLOSE' onclick='window.close()'>\")\; \n"; print "nwin.document.write(\"</body></html>\"); \n"; print "nwin.document.close()\;\n"; print "return false;\n"; print "}\n"; print "</SCRIPT>\n"; print "<BODY onload='window.close()'></body></html>\n"; sub header { print <<"EOM"; <html> <head> <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS"> <title>$Data</title> </head> EOM }

    • ベストアンサー
    • CGI