41

我知道在保存 textarea 时,您可以使用 nl2br() 或 str_replace 将 /n 更改为 br 标签等。但是我不确定如何在 textarea 中插入换行符。我似乎找不到很多关于将数据放回带有这些换行符的文本区域的信息。

例如,我有一个用户可以更新字段的表单。所以用户可以输入:

foo
bar
baz

当它被保存到数据库时,它将被保存为:

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

现在,当该用户在页面刷新后返回该表单时,所有字段都会通过从数据库中获取数据自动填充他们以前的数据。

然而,textarea 将 br 标记显示为文本,而不是添加换行符。我还尝试将 br 标记更改为 /n,希望 textarea 将这些标记解释为换行符,但没有乐趣。除此之外,我还尝试了转义等。

所以我的问题是这可以做到吗?或者更重要的是,它可以使用 HTML/PHP 来完成(我使用 smarty)。如果那不可能,可以使用javascript来完成吗?

示例将不胜感激。

谢谢阅读

4

13 回答 13

72

nl2br将其保存到数据库时不要这样做。nl2br当您在 HTML 中显示文本时执行此操作。我强烈建议不要在数据库中存储任何 HTML 格式(除非您也使用富 HTML 编辑器,在这种情况下不这样做会很愚蠢)。

换行符\n将成为文本区域中的换行符。

于 2011-06-25T21:33:36.923 回答
29

您可以使用str_replace<br />标签替换为行尾字符。

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

或者,您可以在不先调用的情况下将数据保存在数据库中nl2br。这样,换行符将保留。当您显示为 HTML 时,调用nl2br. 这种方法的另一个好处是它需要更少的数据库存储空间,因为换行符是 1 个字符,而“ <br />”是 6 个字符。

于 2011-06-25T21:33:17.503 回答
25

啊,真的很简单

只需添加

white-space:pre-wrap;

到您的显示元素 css

我的意思是,如果您使用的是显示结果,<p>那么您的 css 应该是

p{
   white-space:pre-wrap;
}
于 2013-09-05T09:01:17.957 回答
8

这里发布了一些错误的答案。而不是替换\nto <br />,他们正在替换<br />to\n

因此,当您输入 textarea 时,这是存储<br />在 mysql 中的一个很好的答案:

str_replace("\n", '<br />',  $textarea);
于 2017-02-28T08:22:36.410 回答
7

您可以使用以下代码:

$course_description = nl2br($_POST["course_description"]);
$course_description = trim($course_description);
于 2015-05-19T22:02:21.130 回答
3

我的建议是使用换行符将数据保存到数据库,而不是使用 nl2br 解析它。您应该在输出而不是输入中使用 nl2br。

对于您的问题,您可以使用 php 或 javascript:

PHP:

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

jQuery:

$('#myTextArea').val($('#myTextArea').val().replace(@<br />@, "\N"));
于 2011-06-25T21:36:00.343 回答
2

简单的方法:

  1. 使用它插入mysql:

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

  2. 并将其用于输出:

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

于 2017-03-23T02:28:15.823 回答
1

PHP 端:从 Textarea 字符串到 PHP 字符串

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

PHP 端: PHP 字符串返回到 TextArea 字符串:

$list = str_replace('|', '&#13;&#10;', $r['db_field_name']);
于 2014-02-06T20:08:23.573 回答
1

这对我有用。

 str_replace(array("\r", "\n"), '&#10;', $textareavalue);
于 2016-03-30T02:09:29.110 回答
0

我发现的形式是 str_replace('<br>', PHP_EOL, $textarea);

于 2017-06-18T12:28:39.180 回答
0

当我将该 var 传递给 HTML 文本区域值属性时,从 PHP 中使用单引号作为换行符对我来说可以支持换行符

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;
});
于 2016-07-11T20:56:28.437 回答
-1

我不确定这是可能的,但你应该尝试<pre><textarea> ... </textarea></pre>

于 2011-06-25T21:34:27.627 回答
-5
<?php
$smarty = new Smarty;
$smarty->assign('test', "This is a \n Test");
$smarty->display('index.tpl');
?>

In index.tpl

{$test|nl2br}

In HTML

This is a<br />
test
于 2014-01-28T09:59:30.490 回答