разрывы строк в текстовом поле

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

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

foo
bar
baz

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

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

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

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

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

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

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


person fl3x7    schedule 25.06.2011    source источник


Ответы (13)


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

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

person Halcyon    schedule 25.06.2011
comment
спасибо всем за ответы. Теперь я вижу, что лучше не добавлять html на пути к базе данных, а применять его, если и когда это необходимо, на выходе :) спасибо - person fl3x7; 26.06.2011
comment
@ fl3x7 не забывайте, что вы должны лечиться по пути из соображений безопасности :) - person vdegenne; 26.06.2011
comment
@Oddantfr Согласен :) Я просто привык иметь включаемый файл, который охватывает всю предварительную обработку, связанную со страницей. Таким образом, все значения POST и GET очищаются перед выполнением любого php, связанного со страницей. - person fl3x7; 26.06.2011
comment
Следует отметить одну вещь: использовать \n между " (двойные кавычки) вместо ' (одинарные кавычки). В противном случае это не сработает. Вот так: "\n" - person Rens Tillmann; 13.02.2015

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

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

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

person Francois Deschenes    schedule 25.06.2011
comment
И, конечно же, если вы выполняете замену на дисплее, а не сохраняете ее в базе данных (что, я думаю, определенно лучше), тогда код будет выглядеть так: str_replace(PHP_EOL, '‹br /›', $textarea); ... или просто nl2br($textarea) ... - person squarecandy; 21.03.2013

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

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

white-space:pre-wrap;

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

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

p{
   white-space:pre-wrap;
}
person Nizam Kazi    schedule 05.09.2013
comment
Это будет работать только тогда, когда вы вставляете данные в Textarea и отображаете их в другом элементе (во внешнем интерфейсе). - person Nizam Kazi; 05.09.2013
comment
если вы хотите, чтобы это было точно так же, как <pre> (без переноса, кроме новой строки), вы можете использовать p { white-space: pre; }. - person Aidin; 05.10.2019

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

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

str_replace("\n", '<br />',  $textarea);
person Bashir Noori    schedule 28.02.2017

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

$course_description = nl2br($_POST["course_description"]);
$course_description = trim($course_description);
person rahul    schedule 19.05.2015

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

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

PHP:

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

jQuery:

$('#myTextArea').val($('#myTextArea').val().replace(@<br />@, "\N"));
person Ryan Casas    schedule 25.06.2011

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

  1. Используйте это, чтобы вставить в mysql:

    $msg = $_GET['msgtextarea']; //or POST and my msg field format: text
    $msg = htmlspecialchars($msg, ENT_QUOTES);

  2. И используйте это для вывода:

    echo nl2br($br['msg']);

person Vũ Lê Ngọc Anh    schedule 23.03.2017

Сторона PHP: из строки Textarea в строку PHP

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

Сторона PHP: строка PHP обратно в строку TextArea:

$list = str_replace('|', '&#13;&#10;', $r['db_field_name']);
person cssyphus    schedule 06.02.2014

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

 str_replace(array("\r", "\n"), '&#10;', $textareavalue);
person Joel Enanod Jr    schedule 30.03.2016

Из PHP использование одинарных кавычек для разрыва строки помогло мне поддерживать разрывы строк, когда я передаю эту переменную в атрибут value текстовой области 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;
});
person Gene Bo    schedule 11.07.2016

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

person Mike    schedule 18.06.2017

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

person vdegenne    schedule 25.06.2011
comment
@Nideo, это немного сложно и не очень аккуратно, если ты это имел в виду. Но это работает, если вы не используете никаких ‹br›, но пусть то, что написал пользователь - person vdegenne; 26.06.2011

<?php
$smarty = new Smarty;
$smarty->assign('test', "This is a \n Test");
$smarty->display('index.tpl');
?>

В index.tpl

{$test|nl2br}

В HTML

This is a<br />
test
person Roberto Guzzo    schedule 28.01.2014