WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:テーブルタグでページが崩れる

0:[投稿] セイ [MAIL] [URL] [2004/02/11 09:27 ][環境:WINXP Apache?]

掲示板のようにユーザーがHTMLでテーブルタグを書き込み、それを表示させる、というものを作っています。ユーザーが入力したタグに間違いが無ければ正常に表示されるのですが、テーブルタグを閉じ忘れなど、タグに間違いがあるとページ全体のレイアウトが崩れてしまいます。タグが間違っていても全体に影響を与えないようにしたいのですがどうしたらよいのでしょうか?
PHPとMYSQLをつかっていてMYSQLの中にはいっているテーブルタグを表示しています。


1:[回答] AC [2004/02/11 13:29 ]

Tidy関数が使えるのであれば、それを使うのがよいかも。
http://www.php.net/manual/ja/ref.tidy.php

自力でやろうと思うと、結構大変です。
開始タグと終了タグの対応を調べる必要があります。

以下、HTML4.01 Strict DTDをもとに話を進めます。
DTDの読み方は、
http://www.parkcity.ne.jp/%7Echaichan/src/htmdtd.htm
にあるので、これを参考にしながら、HTML 4.01のテーブルの仕様書
http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html401j/struct/tables.html
を読んで下さい。

table要素の直下には、tbody要素が置けます。tbody要素の子要素には、
tr要素が置けます。tr要素の子要素は、th要素、td要素のどちらかが可能です。
なお、table要素の子要素には、tbodyの他に、caption,col,colgroup,thead,tfoot
が入り得ますが、ここではないとします。
<table>
<tbody>
 <tr>
  <th>...</th>
  <td>...</td>
 </tr>
</tbody>
</table>

tbody要素の開始・終了タグとも省略可能なので、省略するものとします。
<table>
<tr>
 <th>...</th>
 <td>...</td>
</tr>
</table>

基本的には、このような構造になっていればよいわけです。
基本方針は、<>で囲まれている部分を先頭から調べて行き、
以下の条件を満たしている場合に書き込みOKとします。
(簡単にするため、td,th要素内に別の要素を入れるのは不許可にします)
1. table要素開始タグの次はtr要素開始タグが来る
2. tr要素開始タグの次はth要素開始タグまたはtd要素開始タグが来る
3. th要素開始タグ・td要素開始タグの後は、その終了タグが来る。
4. th要素終了タグ・td要素終了タグの後は、tr要素終了タグか次のth・td開始タグが来る
5. tr要素終了タグの後は、table要素終了タグか、tr要素開始タグが来る。
これらの条件を満たさない場合は、エラーとして書き込みを受け付けないようにします。
ただし、HTMLでは、tr,th,td要素の終了タグは省略可能なので、3,4は以下のように修正可能です。
3'. th要素開始タグ・td要素開始タグの後に</tr>が来てもよい。
この場合、</tr>の前にthまたはtdの終了タグを補う。
3''. th要素開始タグ・td要素開始タグの後に</table>が来てもよい。
この場合、</table>の前に
a. thまたはtdの終了タグ
b. </tr>
をこの順に補う。
4'. th要素終了タグ・td要素終了タグの後に</table>が来てもよい。
この場合、</table>の前に</tr>を補う。

以上の方法を取った場合、table要素終了タグがなかった場合、
エラーとなります。
書き込みの末尾に来た場合に、table要素終了タグを補う、というエラー
補正も考えられますが、意図せずにtable要素終了タグを書かなかった、
という場合があるので、やはりエラーを出した方がよいと思います。


2:[質問] セイ [2004/02/12 16:53 ]

やはり結構大変なんですね、tidy関数とかDTDなんてはじめてききました。入力する際に制限をもうけておくわけですね。勉強するものがたくさんありそうですが頑張ってみます。ありがとうございました

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World