• 締切済み

フォームのtextareaにnl2brを使用すると、入力内容の改行部分に<br />が表示されてしまう。

現在、フォームを作成しています。 セッションを利用してフォームの次のファイルにデータを受け渡しています。 問題は、フォームのtextareaにnl2brを使用すると、出力画面のtextareaに入力された内容において改行がある部分に<br />タグが表示されてしまうことです。 フォームの流れ: start.phpにおいてフォームに入力及び、入力エラーがある場合、入力内容訂正の表示。 mail.phpにおいて入力内容の確認及びデータ送信。 start.phpのtextarea以下: <textarea name="test"><?php echo nl2br(htmlspecialchars($input_data['test'], ENT_QUOTES, 'UTF-8')) ?></textarea> 解説:start.phpでは、フォームの入力項目のいずれかに入力エラーがあるとその項目の入力内容の訂正を促し、入力されたデータをもう一度表示します。(<textarea name="test">に入力されたデータをもう一度<textarea name="test">に表示します。) mail.phpにおいてstart.phpのtextareaに入力されたデータを表示する部分は以下: <?php echo nl2br(htmlspecialchars($input_data['test'], ENT_QUOTES, 'UTF-8')) ?> start.phpにおいて入力項目のいずれかにエラーがあり、<textarea name="test">に入力されたデータをもう一度<textarea name="test">に表示した場合も、また、mail.phpにおいてstart.phpのtextareaに入力されたデータを表示した場合も、<textarea name="test">内の文字列に改行があるとその部分に<br />が表示されてしまいます。 入力例: あいうえおかきくけこ たちつてと 表示例(nl2br使用): あいうえおかきくけこ<br /> たちつてと 解説:nl2brを使用した場合、<br />は挿入されてしまいますが、予定の場所で改行されて表示されます。 試しにnl2br()をコードから削除すると、以下のような表示となります。 表示例(nl2br未使用): あいうえおかきくけこたちつてと 解説:nl2brを使用しない場合、改行されません。 どのようにすれば、textareaに入力された内容の改行部分が改行だけされ<br />が表示されないようにできるでしょうか? よろしくお願いします。

みんなの回答

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

nl2brを使用して、<br />を \n とかに戻してやればいいと思います。 $data = nl2br(htmlspecialchars($input_data['test'], ENT_QUOTES, 'UTF-8')); echo ereg_replace ("<br />","\n",$data); とかで。

kitty1000
質問者

補足

moon_nightさん ご回答、ありがとうございました。 moon_nightさんに教えていただいた方法ではありませんが、解決しました。 解決方法は、 start.phpのtextarea以下: <textarea name="test"><?php echo nl2br(htmlspecialchars($input_data['test'], ENT_QUOTES, 'UTF-8')) ?></textarea> を <textarea name="test"><?php echo htmlspecialchars($input_data['test'], ENT_QUOTES, 'UTF-8') ?></textarea> へ変更するだけという簡単なものでした。(nl2br()を削除するだけ。) 理由ですが、<textarea>にnl2br()を使用していると、入力項目にエラーがありデータの再出力時に<br />が<textarea>の文字の改行部分に付加されてしまいます。しかし、<textarea>の改行は本来\n(\rだったかな?)のため、<br />が表示されてしまうというものでした。 逆にmail.phpにおいてstart.phpのtextareaに入力されたデータを確認する画面では、HTMLで表示するため<br />は有効となります。そのため、確認画面(mail.php)においては以下の記述のまま(nl2br()を使用したまま)で問題ありませんでした。: <?php echo nl2br(htmlspecialchars($input_data['test'], ENT_QUOTES, 'UTF-8')) ?>