>本題に入りますが、投稿内容を<PRE>タグで囲むということ(仕様を考えるのページ)ですが、それでは
><br />
>タグが使用できず改行ができなくなる、ということになります。
まず、この掲示板は、用途的にプログラムソースを貼ることが多いので、
基本等幅フォントで表示する必要がある、というのが<PRE>で囲むようにした
理由です。ただし、等幅フォントにするだけなら<TT>で囲めばよいので、
現状ではそうしています。
http://kmaebashi.com/bbs/list.php?boardid=kmaebashibbs&thread=25
<PRE>で囲むと、投稿者が改行を入れなかった場合、画面が際限なく
右に伸びて崩れてしまうので改善したわけです。
というわけで、<PRE>タグ云々の話はすでに現状の実装とはずれているわけですが、
>そこで思ったのですが、そもそも<PRE>タグを使用せずに<や>の記号を無効にすればいいのでは、ということです。
<PRE>タグの中であっても、<や>の記号は普通に特殊文字としての
意味を持ちます。たとえば以下のページに載せているサンプルソースでは、
ソース全体を<PRE>で囲んでいますが、行番号は<FONT>タグで青字にしていますし、
ソース内で<やら>やら"やらを使うときには<とか>とか"とかに
しています。
http://kmaebashi.com/programmer/bbs_dev/newbbs.html
>そして思ったのが、phpのhtmlspecialchars()関数です。HTMLにとって特別な意味の<>をすべて単なる文字に変換してくれるという非常に便利な関数です。詳しいことは検索などお願いします。
よって、この手のエスケープは、どちらにせよ必要であり、
htmlspecialchars()もすでに随所で使っています。
例)
http://kmaebashi.com/programmer/bbs_dev/list.html
>要するに、
>$test = $_GET["test"];
>を、
>$test = htmlspecialchars($_GET["test"]);
>のようにしてしまおう、という考えです。こうすれば、<PRE>を使わずに済むため、改行が実現できると思います。
ところで、この例だと、入力の時点でhtmlspecialchars()をかけていますが、
これはそもそも考え方が間違っている、ということをこちらで書いています。
http://kmaebashi.com/zakki/zakki0042.html
htmlspecialchars()をかけるのは入力時ではなく出力時にすべきです。
で、上記の記事でも言い訳を書いていますが、そして「PHPとMySQLで掲示板を作る」
内にも注釈を足していますが、
http://kmaebashi.com/programmer/bbs_dev/index.html
現状の「PHPとMySQLで掲示板を作る」のプログラムは(実際にここで動いている
掲示板もそうなのですが)、PHP4の時代のデフォルトであるmagic quoteを使って
いるので、今となってはよくないプログラムなんですよねえ。
本記事、注釈を付けつつ公開を続けてきましたが、初心者を惑わせるのも
よろしくないので、そろそろ消すべきかもしれません。