разрывы строк в текстовой области - PullRequest
33 голосов
/ 26 июня 2011

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

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

foo
bar
baz

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

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

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

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

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

Примеры приветствуются.

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

Ответы [ 13 ]

65 голосов
/ 26 июня 2011

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

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

27 голосов
/ 26 июня 2011

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

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

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

24 голосов
/ 05 сентября 2013

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

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

white-space:pre-wrap;

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

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

p{
   white-space:pre-wrap;
}
6 голосов
/ 20 мая 2015

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

$course_description = nl2br($_POST["course_description"]);
$course_description = trim($course_description);
2 голосов
/ 28 февраля 2017

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

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

str_replace("\n", '<br />',  $textarea);
1 голос
/ 23 марта 2017

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

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

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

    <code>echo <strong><em>nl2br</em></strong>($br['msg']);
1 голос
/ 26 июня 2011

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

По вашему вопросу вы можете использовать php или javascript:

PHP:

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

jQuery:

$('#myTextArea').val($('#myTextArea').val().replace(@<br />@, "\N"));
0 голосов
/ 18 июня 2017

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

0 голосов
/ 11 июля 2016

Использование PHP в одинарных кавычках для разрыва строки помогло мне выполнить разрывы строк, когда я передаю эту переменную в текстовую область 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 голосов
/ 30 марта 2016

Это работает на меня.

 str_replace(array("\r", "\n"), '&#10;', $textareavalue);
...