- 締切済み
入力テキスト内で改行コードが表示されてしまいます。
現在phpで掲示板を作成しております。 返信画面でデータベースに保存している過去データを 返信用のテキストボックスで表示しているのですが、 例) ・コード <TEXTAREA NAME=body COLS=50 ROWS=8 wrap="soft"><? print $body ?></TEXTAREA> ・ブラウザ上 掲示板です<BR>テスト という風に表示されてしまいます。 改行が実行されないのはなぜでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- wakame0729
- ベストアンサー率32% (245/765)
>などの手法がよく見られますが、これは別な手法なのでしょうか? <BR>さえ入っていなければ普通に行頭に>を追加、それをhtmlspecialcharsして表示すればこのようになりますよ。DBに<BR>をつけた状態で保存しているのがそもそもの問題だと思います。
- wakame0729
- ベストアンサー率32% (245/765)
DBに<BR>が格納されているのだとしたら、htmlspecialcharsをしようと<BR>は表示されてしまいますよ。str_replace関数等で<BR>を"\n"に変換する必要があります。 面倒でしょ?先の回答で「DBには素の状態で保存して、表示携帯に応じて変換する」と書いたのは、こういうケースを想定しての事です。strip_tagsというタグを取り去る関数もありますが、元々書き込みに<BR>が入ってる事自体がまずいと思うので本末転倒のような気がします。 まだ開発中であれば、書き込み時の処理自体を見直した方が良いかと思います。<BR>が入ったままですとhtmlspecialcharsを使って表示した時にも改行されず<BR>と画面に表示されるだけです。かといってhtmlspecialcharsを使わずに画面表示をすると、もし書き込み時にタグやスクリプトが混入した場合、そのまま画面に表示されてセキュリティホールになる場合があります。
- wakame0729
- ベストアンサー率32% (245/765)
<textarea>タグ内では<br>タグは効きません。<br>を改行(\n)に変換すれば期待通りの表示ができるはずです。 まず問題点ですが、DB内のテキストデータの改行が既に<br>になってるんですよね?これはユーザーが入力した訳じゃないのでは?恐らく書き込みの確認画面などにnl2br関数で改行をBRに変換して、そのままDBに書き込んでいるのでは?基本的にDB内には素の状態で保存して、表示時に表示方法に合わせて変換をする考え方の方がスマートです。 次に<br>が本文中に出てくるのは許すとしますが、<textarea>掲示板です<br>テスト</textarea>というのはHTML的に正しくありません。ブラウザや文字列によってはブラウザで正常に表示できない場合があります。文字列をブラウザに出力する際にはhtmlspecialcharsを通して出力するようにしましょう。
お礼
確かにDBに保存するときに<BR>で保存しています。 また <TEXTAREA NAME=body COLS=50 ROWS=8 wrap="soft"><? print htmlspecialchars($body) ?></TEXTAREA> という風にしたのですが相変わらず<BR>が表示されてしまいます。
お礼
しかしよく掲示板の返信などで返信用の入力ボックスの内で >掲示板です >テスト <返信内容> などの手法がよく見られますが、これは別な手法なのでしょうか?