HTTPサーバーとWeb開発

41. HTMLでの1行120バイトの制限に対応するには?

iSeries400のCGIによるHTML出力は、改行コードも含めて1行が120バイト以下でなければならないという制限がある。しかし現実には長い文字列を1行として表現したい場合もある。ここではそのようなときの対処方法を紹介する。

通常 HTMLでは、たとえ1つのタグが複数行に及んでいたとしてもブラウザ上では問題なく解釈される(解釈できるのは当然、ブラウザが対応しているタグだけであり、WEBアプリケーションによる独自のタグは含まれない。またWORD途中での改行はタグを認識できなくなることもある。そこでスペースやダブルクォートなど、節目となる部分での改行をここでは指すものとする)。従って、

<a
 href=
"http://www.as400-net
.com/"
>
トップ
・ページ
</a>

のようにタグ要素が複数行にわたった記述でも、ブラウザ上では「トップ・ページ」の文字列が1行で表示されるし、そこをクリックすれば、通常通りリンク指定されたページにジャンプすることができる。
(確認したい方は ここを クリック

従って、CGI出力において1行が120バイト以上を要する場合に iSeries400の仕様を満たすためには、下記のように任意の位置であらかじめ改行しておけばよい、ということになる。

print  <<END_OF_HTML;
Content-type: text/html
<HTML><HEAD><TITLE>CGI_Output</TITLE>
<META HTTP-EQUIV="Content-Type"  CONTENT="text/html;charaset=$charaset">
</HEAD>
<BODY>
<MAP NAME="nav">
<AREA SHAPE="rect"  COORDS="30,30,30,30" 
【iSeries400用の改行】
 HREF="/usr/local/bin/opt/lib/src/misc/personal/others/misc/msg.htm"
【iSeries400用の改行】
 ALT="120桁を越える場合は、あらかじめ120桁以内の任意の位置に改行を挿入しておくことで、
【iSeries400用の改行】
iSeries400の仕様を満たすことができます。">
</MAP>
<P>文字列部分も、120桁を越える場合は、あらかじめ任意の位置に改行を挿入しておくことで、
【iSeries400用の改行】
iSeries400の仕様を満たすことができます。
【iSeries400用の改行】
なお、これらの文字列は本来、ブラウザ上では1行で表示されるものです。</P>
<BR>※ ブラウザは「<BR>」を受け取ることで改行と見なしますが、iSeries400にとっては文字列に過ぎません。
【iSeries400用の改行】
<BR>※ iSeries400の改行はいわゆる物理改行を指します。しかしブラウザはその改行コードを解釈できませんので、
【iSeries400用の改行】
改行することなく表示します。
<BR>※ iSeries400の改行とブラウザの改行は、同じものではないわけです。
</BODY>
</HTML>
END_OF_HTML

上のCGIスクリプトのうち、<HTML>〜</HTML>部分のみをテキストファイルにコピー・ペーストした後、そのファイルの拡張子を.htmlに変更してIEなどでオープンしていただきたい。iSeries400とブラウザの改行の違いがおわかりいただけるだろうか?