3

I am storing the user input in a text area into a database by using nl2br().<br/> Now the problem is that I do not want to show the "br" tags when I show this input in a text area later but as a new line.<br/> I was using str_replace but this seems to add a new line each time I get back and forth. eg. user enters

Hello
World

It gets stored as

Hello<br />World 

fine with me. but when I display it again in the text area I get (after str_replace..ing the br tags with "\n")

Hello

World  //which if i submit gives me Hello<br /><br />World

Is there any way to achieve what I want to do over here?

user1887239
  • 51
  • 2
  • 10

2 Answers2

1

Don't store it with nl2br. You should only store the raw data that is posted. If you want to update it for display, use nl2br at that time.

if ($storing) {
    $dbstmt->execute($_POST['textarea-value']);
}
else {
    $textareaValue = $db->query($select);
    echo "<div>" . nl2br(htmlspecialchars($textareaValue)) . "</div>";
    echo "<textarea>" . htmlspecialchars($textareaValue) . "</textarea>";
}
Explosion Pills
  • 188,624
  • 52
  • 326
  • 405
1

The nl2br function appends a <br/> after each line break characters (\r\n, \n\r, \n and \r).

It does not however, remove the break line itself. As a result, when you use str_replace to add the break line again, it is showing as double.

There are two options, firstly, change the str_replace to simply remove the <br/> without adding a new line character, or secondly to not use nl2br.

I would opt for the second, and use nl2br when I need to display the data inside html.

Kami
  • 19,134
  • 4
  • 51
  • 63