インターネット活用塾 4.CGIのカスタマイズ


HTML出力のカスタマイズ

    CGIは動作結果をHTMLで出力し、そのHTMLをブラウザで閲覧しています。
このHTML文を修正することで、自由なデザインのページを出力することができるようになります。

Perl全体を理解し、ソフトを開発するまでにはそれなりの勉強が必要です。
フリーやシェアウェアを改造できるようになることで、お望みのソフトを手に入れることができるかもしれません。

1.CGIで出力するHTML文
 CGIがHTML文を出力するコマンドは2通りあります。出力部分の基本については以下のとおりです。
CGIからの出力の大半は(1)のコマンドになります。
このprint命令が基本になっていますので、よく理解しておいて下さい。
(1)通常の出力(print)
Chama-Netで配布しているCGIはほとんどこのコマンドで出力しています。
出力部分の書き方を統一することで、カスタマイズも容易になっています。
(配布サイトはこちら)

CGIからHTML文を出力する基本形は
 print "あいうえお\n";
です。

このprint命令の意味はこのようになっています。

このprint文により、「あいうえお」が出力されます。
print は出力命令です。
" " のダブルクオート間が出力されます。
; セミコロンによってprint命令が終了します。

\nはソースの改行です。
以下の表のように「\n」が出力されない場合、HTMLソースが1行で出力されてしまいます。
print命令の比較 print "あいうえお\n";
print "かきくけこ\n";
print ”あいうえお";
print "かきくけこ";
出力結果(ソース) あいうえお
かきくけこ
あいうえおかきくけこ
出力結果(ブラウザ) あいうえおかきくけこ あいうえおかきくけこ

CGIからHTML文を出力する際には、
print "出力したいHTML文\n";
が基本になります。

※スペースなど不要な文字が混入しないよう注意しましょう。
(2)まとめて出力
CGIではHTML文をまとめて出力することが出来ます。

基本的な出力命令は
 print <<"HERE";
  <HTML>
  HELLO!
  </HTML>
 HERE

になります。

上記の「HRER」はどのような文字でも構いませんので「AIUEO」や「SYOUHIN」などさまざまです。
print <<"HERE";
・・・
HERE
の・・・部分は自由にHTMLを入れることが出来ます。

一見、(「print "";」より)こちらの方が便利が良さそうですが、HTML中に条件分岐やサブルーチンなどPerlの処理に制限がかかり、複雑な処理を行いながらHTMLを出力するということは出来ません。

Chama-Netの配布しているCGIでは上記コマンドはほとんど使用していません。


2.文字化け
日本語にはSjisコードやEUCコードがあり、WindowsやMac、UNIXなどOSによってコードが異なります。
ほとんどの日本語はスクリプトどおりに表示されますが、中にはコードの桁数が異なる文字もあり、誤って表示してしまう場合があります。
具体的には、「予」や「能」といった漢字は文字化けします。

例えば「予定」と表示したい場合
 print "予定\n";
を実行すると「欄・」と表示されます。

このように日本語が正常に表示されなかった場合、文字化けした文字の後ろに「\」(半角円マーク)を挿入すると正常に表示されるようになります。
 print "予\定\n";
を実行すると「予定」と正常に表示されます。


3.記号の出力
半角の記号はPerlのコマンドと判断されてしまいます。
記号を表示したい場合は、記号の前に「\」(半角円マーク)を付けます。

例えば、
  print "「"」はダブルクオート、「;」はセミコロンです。\n";
を実行してもエラーになりますが、
  print "「\"」はダブルクオート、「\;」はセミコロンです。\n";
を実行すると
  「"」はダブルクオート、「;」はセミコロンです。 」
と正常に表示されます。

また、HTMLで表示することが出来ない文字(「>」や「<」、「&」など)もコードで記載し、記号の前に\を付けます。
「>」は「&lt;」、「<」は「&gt;」、「&」は「&amp;」になります。

参考)
print "&lt\;お名前&gt\;&amp\;&lt\;ご住所&gt\;\n";
 →<お名前>&<ご住所>


4.その他の注意点
文章中にPerlの変数が混入している場合があります。
Perlの変数は、$aiueoや$aaa[$count]など$マークの後ろに半角英数が付いています。
この変数を修正したり、変数の前後に記号や半角英数を追加してしまうと正常に表示されなくなってしまいます。

例えば、$payが500の場合
  print "ご請求額は$pay円です。\n";
は「ご請求額は500円です。」と表示されますが、
  print "ご請求額は$payYENです。\n";
に修正すると「ご請求額はです。」となってしまいます。
これは、$payYENを変数と判断し、$payYENが空白なので、出力されなくなってしまったことが原因です。

このように、変数の前後に記号や英数を追加したい場合には2つの対応方法があります。
■対応1(出力するスクリプトの行を分ける)
  print "ご請求額は$pay";
  print "YENです。\n";

■対応2(\マークを付ける)
  print "ご請求額は$pay\YENです。\n";



© Copy Right 2001 Chama.ne.jp