プロが教える店舗&オフィスのセキュリティ対策術

現在、フォームを作成しています。
セッションを利用してフォームの次のファイルにデータを受け渡しています。

問題は、フォームの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 />が表示されないようにできるでしょうか?

よろしくお願いします。

A 回答 (1件)

nl2brを使用して、<br />を \n とかに戻してやればいいと思います。


$data = nl2br(htmlspecialchars($input_data['test'], ENT_QUOTES, 'UTF-8'));
echo ereg_replace ("<br />","\n",$data);
とかで。

この回答への補足

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')) ?>

補足日時:2008/11/22 23:14
    • good
    • 3

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