سؤال

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?

هل كانت مفيدة؟

المحلول

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>";
}

نصائح أخرى

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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top