プロが教えるわが家の防犯対策術!

現在phpで掲示板を作成しております。
返信画面でデータベースに保存している過去データを
返信用のテキストボックスで表示しているのですが、

例)
・コード
<TEXTAREA NAME=body COLS=50 ROWS=8 wrap="soft"><? print $body ?></TEXTAREA>
・ブラウザ上
掲示板です<BR>テスト

という風に表示されてしまいます。
改行が実行されないのはなぜでしょうか?

A 回答 (3件)

>などの手法がよく見られますが、これは別な手法なのでしょうか?



<BR>さえ入っていなければ普通に行頭に>を追加、それをhtmlspecialcharsして表示すればこのようになりますよ。DBに<BR>をつけた状態で保存しているのがそもそもの問題だと思います。
    • good
    • 1

DBに<BR>が格納されているのだとしたら、htmlspecialcharsをしようと<BR>は表示されてしまいますよ。

str_replace関数等で<BR>を"\n"に変換する必要があります。

面倒でしょ?先の回答で「DBには素の状態で保存して、表示携帯に応じて変換する」と書いたのは、こういうケースを想定しての事です。strip_tagsというタグを取り去る関数もありますが、元々書き込みに<BR>が入ってる事自体がまずいと思うので本末転倒のような気がします。

まだ開発中であれば、書き込み時の処理自体を見直した方が良いかと思います。<BR>が入ったままですとhtmlspecialcharsを使って表示した時にも改行されず<BR>と画面に表示されるだけです。かといってhtmlspecialcharsを使わずに画面表示をすると、もし書き込み時にタグやスクリプトが混入した場合、そのまま画面に表示されてセキュリティホールになる場合があります。
    • good
    • 0
この回答へのお礼

しかしよく掲示板の返信などで返信用の入力ボックスの内で

>掲示板です
>テスト

<返信内容>

などの手法がよく見られますが、これは別な手法なのでしょうか?

お礼日時:2005/06/08 18:12

<textarea>タグ内では<br>タグは効きません。

<br>を改行(\n)に変換すれば期待通りの表示ができるはずです。

まず問題点ですが、DB内のテキストデータの改行が既に<br>になってるんですよね?これはユーザーが入力した訳じゃないのでは?恐らく書き込みの確認画面などにnl2br関数で改行をBRに変換して、そのままDBに書き込んでいるのでは?基本的にDB内には素の状態で保存して、表示時に表示方法に合わせて変換をする考え方の方がスマートです。

次に<br>が本文中に出てくるのは許すとしますが、<textarea>掲示板です<br>テスト</textarea>というのはHTML的に正しくありません。ブラウザや文字列によってはブラウザで正常に表示できない場合があります。文字列をブラウザに出力する際にはhtmlspecialcharsを通して出力するようにしましょう。
    • good
    • 1
この回答へのお礼

確かにDBに保存するときに<BR>で保存しています。

また
<TEXTAREA NAME=body COLS=50 ROWS=8 wrap="soft"><? print htmlspecialchars($body) ?></TEXTAREA>

という風にしたのですが相変わらず<BR>が表示されてしまいます。

お礼日時:2005/06/08 16:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!