Challenge!!-へたれCGI講座
へたれCGI講座



8:Print命令でHTML出力編(EUC版)

 明けましておめでとうございます。
さてちょっぴり間が空いてしまいましたが、今回は本格的(初歩ですが)にPerlに入ります。
今回は、CGIでHTMLを表示してみましょう。全ての基本です。

【EUCで出力】
 では実際にプログラムに入りましょう。
以下のHTMLを使用してみます。

<HTML>
<HEAD><TITLE>EUC-CGI-1</TITLE></HEAD>
<BODY>「はなでーす」って<BR>きちんと表示される?
</BODY>
</HTML>

普通にHTMLで表示させると

「はなでーす」って
きちんと表示される?

と表示されますよね?
ちなみに、Perlの例では、判りやすいように行番号を先頭に付けていますが、実際には入れちゃだめです。

 では例1です。

1  #!/usr/bin/perl
2
3  #下の行は「これからHTMLを表示する」という意味です。
4  print "Content-type: text/html\n\n";
5  #ここからHTML開始
6  print "<HTML>";
7  print "<HEAD><TITLE>EUC-CGI-2</TITLE></HEAD>";
8  print "<BODY>「はなでーす」って<BR>きちんと表示される?";
9  print "</BODY>";
10 print "</HTML>";
11 __END__

じゃ、解説です。
1行目はアップするサーバー内のPerlがある場所を絶対パスで指定しています。
ちなみに以前紹介した「Atudion」を使用してローカルで試す場合、普通にインストールしていれば 1行目は「#!c:/perl/bin/perl」 になります。

そして、3行目、5行目は「#」で始まっています。
この頭の「#」はコメント文のことで、実際は反映されません。
自分で混乱しないようにコメントを付けていきましょう。

 そして、コメント以外の文章の最後にある「;」(半角)は、一つの文章の終わりを意味
します。ずらずらーっと並べて書くこともできますが、それじゃ見づらいですよね?

 そして大事なのが4行目です。この4行目は「これからHTML表示をしますよ」とサーバーに 伝えるお知らせです。この1行がないとHTMLは出力できません。

ところで「\n」ってなに?と思ってる方もいらっしゃるでしょう。
これは改行です。
4行目の最初の\nは、「Content-type: text/html」に対する改行で、二つ目の\nは空改行です。 この空改行がないと、「Content-type: text/html」が生かせません。
無いとエラーになります。
しかし、このプログラム、一つ軽い問題があります。実際表示される文章には影響しませんが…

では実際、このCGIを実行したものを見てみてください。
EUC-CGI-1.cgi

どうでしょう?きちんと表示されていますね。
ただ、やはり一つ問題があります。
「EUC-CGI-1.cgi」をもう一度開いて、ソースを見てください。
開いたページを右クリックして「ソースの表示」で見れます。EUCで書かれてる物なので、
日本語がちょっと文字化け(下記追記参照)ている上に自動広告が入っちゃってますが…
HTMLソース部分がずらーっと横並びになってますよね。これじゃ見づらいです。

-----追記開始-----03/01/05
【なぜソースが文字化けするの?】
 ブラウザではきちんと見れるのに、ソースを表示すると文字化けてる!
これはブラウザについている日本語コード自動判別機能のおかげ(せい?)です。
ブラウザで見るときは、ブラウザが「おっこれはEUCだな。了解了解」とEUCで表示します。
しかし、メモ帳は「EUC〜? 関係ないね。俺はShift_JISでしか表示しねーぜ!」てな感じで
全てShift_JISで表示しようとしてしまうから、文字化けが起こるのです。
あ、あと以前にも書きましたが、EUCで半角カタカナは御法度です。文字化けします。
-----追記終了-----

 そこでちょっと以下のように修正してみましょう。

1  #!/usr/bin/perl
2
3  #下の行は「これからHTMLを表示する」という意味です。
4  print "Content-type: text/html\n\n";
5  #ここからHTML開始
6  print "<HTML>\n";
7  print "<HEAD><TITLE>EUC-CGI-2</TITLE></HEAD>\n";
8  print "<BODY>「はなでーす」って<BR>きちんと表示される?\n";
9  print "</BODY>\n";
10  print "</HTML>\n";
11  __END__

 見づらいので、\nで要所要所に改行を入れてみました。 実際タグ打ちするときも、一列にばーっとなんて書かないですよね? それと一緒です。
では修正したものを見てみましょう。
EUC-CGI-2.cgi

えーと、ちょっと広告が自動挿入されてるので見づらいかもしれませんが、一応指定した
ところで改行されているのが判ると思います。最初の<HTML>とか。

 EUCでのPrint命令はこの辺で、ちょっとまとめておきましょうか。

1)1行目はサーバー内のPerlがある場所で、コメント文ではない。
2)先頭に#が付く行はコメント文。(1行目除く)
3);は一つの文章の終わりを意味する。
4)\nは改行。見やすくするために上手に使いましょう。
5)「print "Content-type: text/html\n\n";」は、HTMLを宣言する文章。改行が
  二つなのは、空改行が必要なため。

 今回はこんなところでしょうか。
次回はShift_JIS編をやりたいですが…長い文章になりそうです^^;


BACK NEXT
CGI-Index TOP