【问题标题】:line breaks in a textarea文本区域中的换行符
【发布时间】:2023-03-14 00:42:01
【问题描述】:

我知道在保存 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 来完成吗?

示例将不胜感激。

感谢阅读

【问题讨论】:

    标签: php html textarea line-breaks nl2br


    【解决方案1】:

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

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

    【讨论】:

    • 感谢大家的回复。我现在可以看到,最好不要在进入数据库的过程中添加 html,而是在需要时应用它:) 谢谢
    • @fl3x7 好吧,别忘了出于安全考虑,您必须在途中对待:)
    • @Oddantfr 同意 :) 我刚刚养成了拥有一个包含所有与页面相关的预处理的包含文件的习惯。因此,在执行任何与页面相关的 php 之前,所有 POST 和 GET 值都会被清除。
    • 需要指出的是在"(双引号)而不是'(单引号)之间使用\n。否则它将无法正常工作。像这样:"\n"
    【解决方案2】:

    您可以使用str_replace&lt;br /&gt; 标记替换为行尾字符。

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

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

    【讨论】:

    • 当然,如果您在显示上进行替换而不是将其保存到数据库中(我认为这肯定更好),那么代码将是 str_replace(PHP_EOL, '
      ', $textarea); ...或者只是 nl2br($textarea) ...
    【解决方案3】:

    啊,真的很简单

    只需添加

    white-space:pre-wrap;
    

    到你的显示元素 css

    我的意思是,如果您使用 &lt;p&gt; 显示结果,那么您的 css 应该是

    p{
       white-space:pre-wrap;
    }
    

    【讨论】:

    • 只有在 Textarea 中插入数据并在其他元素中(在前端)显示时才有效
    • 如果您希望它与&lt;pre&gt; 完全一样(除了换行符之外没有换行),那么您可以使用p { white-space: pre; }
    【解决方案4】:

    这里发布了一些错误的答案。 他们不是将\n替换为&lt;br /&gt;,而是将&lt;br /&gt;替换为\n

    因此,当您输入 textarea 时,将&lt;br /&gt; 存储在您的 mysql 中是一个很好的答案:

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

    【讨论】:

      【解决方案5】:

      您可以使用以下代码:

      $course_description = nl2br($_POST["course_description"]);
      $course_description = trim($course_description);
      

      【讨论】:

        【解决方案6】:

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

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

        PHP:

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

        jQuery:

        $('#myTextArea').val($('#myTextArea').val().replace(@<br />@, "\N"));
        

        【讨论】:

          【解决方案7】:

          简单的方法:

          1. 用这个插入mysql:

            $msg = $_GET['msgtextarea']; //or POST and my msg field format: text
            $msg = htmlspecialchars($msg, ENT_QUOTES);
          2. 并将其用于输出:

            echo <strong><em>nl2br</em></strong>($br['msg']);

          【讨论】:

            【解决方案8】:

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

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

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

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

            【讨论】:

              【解决方案9】:

              这对我有用。

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

              【讨论】:

                【解决方案10】:

                我发现表格中的作品是 str_replace('<br>', PHP_EOL, $textarea);

                【讨论】:

                • 这适用于我的目的,并且超级简单且灵活
                【解决方案11】:

                当我将 var 传递给 HTML 文本区域 value 属性

                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;
                });
                

                【讨论】:

                  【解决方案12】:

                  我不确定这是否可行,但您应该尝试&lt;pre&gt;&lt;textarea&gt; ... &lt;/textarea&gt;&lt;/pre&gt;

                  【讨论】:

                  • @Nideo 如果这是您的意思,这有点棘手,而且不是很整洁。但是,如果您不使用任何
                    而是让用户写的内容
                    ,它会起作用
                  【解决方案13】:
                  <?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
                  

                  【讨论】:

                    猜你喜欢
                    • 2012-09-02
                    • 2022-01-25
                    • 2021-07-29
                    • 1970-01-01
                    • 2010-09-22
                    • 2011-06-06
                    相关资源
                    最近更新 更多