разрывы строк в текстовой области
Я знаю, что при сохранении текстовой области вы можете использовать nl2br() или str_replace, чтобы изменить теги /n на br и т. Д. Однако я не уверен в том, как вставлять разрывы строк в текстовую область. Кажется, я не могу найти много информации о том, как вернуть данные в текстовую область с этими разрывами строк.
Например, у меня есть форма, в которой пользователи могут обновлять поля. Таким образом, пользователь может ввести:
foo
bar
baz
Когда это будет сохранено в базе данных, оно будет сохранено как:
foo<br />bar<br />baz<br />
Теперь, когда этот пользователь возвращается к эта форма после обновления страницы автоматически заполняет все поля своими предыдущими данными, беря данные из базы данных.
Однако текстовая область отображает теги br в виде текста вместо добавления в разрывы строк. я также попытался изменить теги br на /n, надеясь, что текстовая область будет интерпретировать их как разрывы строк, но без радости. Кроме того, я также пытался сбежать и т. Д.
Итак, мои вопросы таковы: можно ли это сделать? Или, что более важно, это можно сделать с помощью HTML/PHP (im использует умный). Если это невозможно, можно ли это сделать с помощью javascript?
Примеры были бы признательны.
Спасибо за чтение
13 answers
Не делайте nl2br
, когда вы сохраняете его в базе данных. Выполняйте nl2br
при отображении текста в формате HTML. Я могу настоятельно рекомендовать не хранить форматирование HTML в базе данных (если вы также не используете богатый редактор HTML, и в этом случае было бы глупо не делать этого).
Новая строка \n
просто станет новой строкой в текстовой области.
Вы можете использовать str_replace
для замены тегов <br />
на символы конца строки.
str_replace('<br />', PHP_EOL, $textarea);
В качестве альтернативы вы можете сохранить данные в базе данных, не вызывая сначала nl2br
. Таким образом, разрывы линий останутся. При отображении в формате HTML вызовите nl2br
. Дополнительным преимуществом этого подхода является то, что для него потребуется меньше места для хранения в вашей базе данных, поскольку разрыв строки составляет 1 символ, а не "<br />
", который равен 6.
Ах, это действительно просто
Просто добавьте
white-space:pre-wrap;
К вашему отображаемому элементу css
Я имею в виду, что если вы показываете результат с помощью <p>
, то ваш css должен быть
p{
white-space:pre-wrap;
}
Вы можете использовать следующий код:
$course_description = nl2br($_POST["course_description"]);
$course_description = trim($course_description);
Моя рекомендация состоит в том, чтобы сохранить данные в базе данных с разрывами строк, а не анализировать их с помощью nl2br. Вы должны использовать nl2br для вывода, а не для ввода.
Для вашего вопроса вы можете использовать php или javascript:
PHP:
str_replace('<br />', "\n", $textarea);
JQuery:
$('#myTextArea').val($('#myTextArea').val().replace(@<br />@, "\N"));
Простой способ:
-
Используйте это для вставки в mysql:
$msg = $_GET['msgtextarea']; //or POST and my msg field format: text $msg = htmlspecialchars($msg, ENT_QUOTES);
-
И используйте это для вывода:
echo nl2br($br['msg']);
Сторона PHP: от строки текстовой области до строки PHP
$newList = ereg_replace( "\n",'|', $_POST['theTextareaContents']);
Сторона PHP: строка PHP обратно в строку текстовой области:
$list = str_replace('|', ' ', $r['db_field_name']);
Это действует на меня.
str_replace(array("\r", "\n"), ' ', $textareavalue);
Из 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;
});
Здесь размещены некоторые неправильные ответы.
вместо замены \n
на <br />
они заменяют <br />
на \n
Итак, вот хороший ответ для сохранения <br />
в вашем mysql при вводе в текстовую область:
str_replace("\n", '<br />', $textarea);
То, что я нашел, работает в форме
str_replace('
', PHP_EOL, $textarea);
Я не уверен, что это возможно, но вы должны попробовать <pre><textarea> ... </textarea></pre>
<?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