разрывы строк в текстовой области


Я знаю, что при сохранении текстовой области вы можете использовать nl2br() или str_replace, чтобы изменить теги /n на br и т. Д. Однако я не уверен в том, как вставлять разрывы строк в текстовую область. Кажется, я не могу найти много информации о том, как вернуть данные в текстовую область с этими разрывами строк.

Например, у меня есть форма, в которой пользователи могут обновлять поля. Таким образом, пользователь может ввести:

foo
bar
baz

Когда это будет сохранено в базе данных, оно будет сохранено как:

foo<br />bar<br />baz<br />

Теперь, когда этот пользователь возвращается к эта форма после обновления страницы автоматически заполняет все поля своими предыдущими данными, беря данные из базы данных.

Однако текстовая область отображает теги br в виде текста вместо добавления в разрывы строк. я также попытался изменить теги br на /n, надеясь, что текстовая область будет интерпретировать их как разрывы строк, но без радости. Кроме того, я также пытался сбежать и т. Д.

Итак, мои вопросы таковы: можно ли это сделать? Или, что более важно, это можно сделать с помощью HTML/PHP (im использует умный). Если это невозможно, можно ли это сделать с помощью javascript?

Примеры были бы признательны.

Спасибо за чтение

Author: fl3x7, 2011-06-26

13 answers

Не делайте nl2br, когда вы сохраняете его в базе данных. Выполняйте nl2br при отображении текста в формате HTML. Я могу настоятельно рекомендовать не хранить форматирование HTML в базе данных (если вы также не используете богатый редактор HTML, и в этом случае было бы глупо не делать этого).

Новая строка \n просто станет новой строкой в текстовой области.

 61
Author: Halcyon, 2011-06-25 21:33:36

Вы можете использовать str_replace для замены тегов <br /> на символы конца строки.

str_replace('<br />', PHP_EOL, $textarea);

В качестве альтернативы вы можете сохранить данные в базе данных, не вызывая сначала nl2br. Таким образом, разрывы линий останутся. При отображении в формате HTML вызовите nl2br. Дополнительным преимуществом этого подхода является то, что для него потребуется меньше места для хранения в вашей базе данных, поскольку разрыв строки составляет 1 символ, а не "<br />", который равен 6.

 25
Author: Francois Deschenes, 2012-05-18 18:52:14

Ах, это действительно просто

Просто добавьте

white-space:pre-wrap;

К вашему отображаемому элементу css

Я имею в виду, что если вы показываете результат с помощью <p>, то ваш css должен быть

p{
   white-space:pre-wrap;
}
 21
Author: Nizam Kazi, 2013-09-05 09:01:17

Вы можете использовать следующий код:

$course_description = nl2br($_POST["course_description"]);
$course_description = trim($course_description);
 4
Author: rahul, 2015-05-19 22:47:58

Моя рекомендация состоит в том, чтобы сохранить данные в базе данных с разрывами строк, а не анализировать их с помощью nl2br. Вы должны использовать nl2br для вывода, а не для ввода.

Для вашего вопроса вы можете использовать php или javascript:

PHP:

str_replace('<br />', "\n", $textarea);

JQuery:

$('#myTextArea').val($('#myTextArea').val().replace(@<br />@, "\N"));
 1
Author: Ryan Casas, 2011-06-25 21:36:00

Простой способ:

  1. Используйте это для вставки в mysql:

    $msg = $_GET['msgtextarea']; //or POST and my msg field format: text
    $msg = htmlspecialchars($msg, ENT_QUOTES);
  2. И используйте это для вывода:

    echo nl2br($br['msg']);
 1
Author: Vũ Lê Ngọc Anh, 2017-03-23 03:09:50

Сторона PHP: от строки текстовой области до строки PHP

$newList = ereg_replace( "\n",'|', $_POST['theTextareaContents']);

Сторона PHP: строка PHP обратно в строку текстовой области:

$list = str_replace('|', '&#13;&#10;', $r['db_field_name']);
 0
Author: gibberish, 2014-02-06 20:08:23

Это действует на меня.

 str_replace(array("\r", "\n"), '&#10;', $textareavalue);
 0
Author: Joel Enanod Jr, 2016-03-30 02:09:29

Из PHP использование одинарных кавычек для разрыва строки помогло мне поддерживать разрывы строк, когда я передаю этот var в текстовую область HTML значение атрибут

PHP

foreach ($videoUrls as $key => $value) {
  $textAreaValue .= $value->video_url . '\n';
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

HTML/JS

$( document ).ready(function() {
    var text = "<?= htmlspecialchars($textAreaValue); ?>";
    document.getElementById("video_urls_textarea").value = text;
});
 0
Author: gnB, 2016-07-11 20:56:28

Здесь размещены некоторые неправильные ответы. вместо замены \n на <br /> они заменяют <br /> на \n

Итак, вот хороший ответ для сохранения <br /> в вашем mysql при вводе в текстовую область:

str_replace("\n", '<br />',  $textarea);
 0
Author: Bashir Noori, 2017-02-28 08:22:36

То, что я нашел, работает в форме str_replace('
', PHP_EOL, $textarea);

 0
Author: Mike, 2017-06-18 12:28:39

Я не уверен, что это возможно, но вы должны попробовать <pre><textarea> ... </textarea></pre>

 -1
Author: vdegenne, 2011-06-25 21:34:27
<?php
$smarty = new Smarty;
$smarty->assign('test', "This is a \n Test");
$smarty->display('index.tpl');
?>

В индексе.tpl

{$test|nl2br}

В HTML

This is a<br />
test
 -4
Author: Roberto Guzzo, 2014-01-28 09:59:30