【问题标题】:Preserve Line Breaks From TextArea保留 TextArea 中的换行符
【发布时间】:2017-05-17 00:38:25
【问题描述】:

我正在使用 textarea 使用户能够输入 cmets。但是,如果用户输入新行,则输出时不会出现新行。有什么办法可以让换行符保持不变。

知道如何保留换行符吗?

【问题讨论】:

  • 我刚刚禁用了htmlawed,好像和换行无关,换行还是不显示。所以我只是将textarea数据直接写入mysql,当我从mysql数据库回显数据时它没有显示出来。
  • 我还使用 phpmyadmin 浏览了 mysql 表并看到了评论字段。没有
    标签被存储,
  • 我正在做一个 Facebook 风格的评论系统,所以我真的不希望它是所见即所得的。不知道为什么不保留换行符?

标签: php mysql html


【解决方案1】:

两种解决方案:

  1. PHP函数nl2br():

    例如,

    echo nl2br("This\r\nis\n\ra\nstring\r");
    
    // will output
    This<br />
    is<br />
    a<br />
    string<br />
    
  2. 将输入包装在&lt;pre&gt;&lt;/pre&gt; 标签中。

    见:W3C Wiki - HTML/Elements/pre

【讨论】:

  • +1,刚刚在我的 PHP 收藏夹中获得了一个特权位置 nl2br() :)
  • 我认为,选择和样式
     对于 xss 来说要好得多。
【解决方案2】:

得到我自己的答案:使用来自 textarea 的数据的这个函数解决了这个问题:

function mynl2br($text) { 
   return strtr($text, array("\r\n" => '<br />', "\r" => '<br />', "\n" => '<br />')); 
} 

更多:http://php.net/nl2br

【讨论】:

    【解决方案3】:

    这是我用的

    $textToOutput = nl2br(htmlentities($text, ENT_QUOTES, 'UTF-8'));
    

    $text是需要显示的文字 $textToOutput 是从 nl2brhtmlentities 返回的文本,因此它可以安全地显示在 html 上下文中。
    ENT_QUOTES 将转换双引号和单引号,因此您不会遇到这些问题。

    【讨论】:

    • 我相信 UTF-8 现在是 PHP 的默认值。当然,明确表达也无妨。
    • 如何在文本之间插入空格?
    • 您应该始终将原始数据存储在数据库中。然后在显示数据之前对其进行转换和清理。
    【解决方案4】:

    为什么做起来很容易,却又那么难:)

    //here is the pull from the form
    $your_form_text = $_POST['your_form_text'];
    
    
    //line 1 fixes the line breaks - line 2 the slashes
    $your_form_text = nl2br($your_form_text);
    $your_form_text = stripslashes($your_form_text);
    
    //email away
    $message = "Comments: $your_form_text";
    mail("destination_email@whatever.com", "Website Form Submission", $message, $headers);
    

    你显然需要标题并且可能有更多的字段,但这是你的 textarea 照顾

    【讨论】:

    • 这是不安全的,与问题不太相关。
    • 试试吧.... 发布到电子邮件或 SQL.... Potatoes 土豆..... 尝试运行这些行并解决问题.... 没有一堆乱七八糟的行有时有效或无效的代码.... :)
    • 在所有答案中,这个最不简洁
    【解决方案5】:

    我正在使用这两个方法步骤来保留 textarea 中的相同文本以存储在 mysql 中 有时我也可以简单地显示纯文本.....

    第 1 步:

    $status=$_POST['status'];<br/>
    $textToStore = nl2br(htmlentities($status, ENT_QUOTES, 'UTF-8'));
    

    在查询中输入$textToStore....

    第 2 步:

    为选择查询编写代码……和直接回显值……

    有效

    【讨论】:

    • 您应该始终将原始数据存储在数据库中。然后在显示数据之前对其进行转换和清理。
    【解决方案6】:

    这行得通:

    function getBreakText($t) {
        return strtr($t, array('\\r\\n' => '<br>', '\\r' => '<br>', '\\n' => '<br>'));
    }
    

    【讨论】:

      【解决方案7】:
      function breakit($t) {
          return nl2br(htmlentities($t, ENT_QUOTES, 'UTF-8'));
      }
      

      这可能对你有帮助

      传递textarea wal

      【讨论】:

        猜你喜欢
        • 2015-08-16
        • 1970-01-01
        • 2015-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多