写入MySQL时保留TextArea的换行


105

我正在使用文本区域使用户能够输入评论。但是,如果用户输入新行,则新行在输出时不会出现。有什么办法可以使换行符停留。

知道如何保存换行符吗?


我刚刚禁用了htmlawed,似乎与换行符无关,但换行符仍未显示。因此,我只是将textarea数据直接写到mysql,当我从mysql数据库中回显数据时它不会显示。
Hirvesh

我还使用phpmyadmin浏览了mysql表,并查看了注释字段。没有<br/>标记被存储,
Hirvesh 2011年

我正在做一个Facebook风格的评论系统,所以我真的不希望它是所见即所得。没有想法为什么不能保留换行符?
Hirvesh 2011年

Answers:


158

两种解决方案:

  1. PHP功能 nl2br()

    例如,

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

    请参阅: W3C Wiki-HTML / Elements / pre


2
+1,刚刚在我的“我的最爱”中获得了PHP的特权nl2br():)
Zuul

1
我认为,为xss选择和设置<pre> </ pre>样式要好得多。
EGurelli

38

这是我用的

$textToStore = nl2br(htmlentities($inputText, ENT_QUOTES, 'UTF-8'));

$inputText是由表单或文本区域提供的文本。 $textToStore是从nl2br和返回的文本htmlentities,将存储在数据库中。 ENT_QUOTES将同时转换双引号和单引号,因此您将不会遇到任何麻烦。


2
我相信UTF-8现在是PHP中的默认设置。但是,当然,露骨无伤。
ProfileTwist 2014年

如何在文本之间插入空格?
JWC

您应该始终将原始数据存储在数据库中。然后在显示数据之前将其转换并消毒。
爱德华

3

得到了我自己的答案:从textarea的数据中使用此功能可以解决此问题:

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

此处更多信息:http : //php.net/nl2br


2

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

第1步:

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

在查询中输入 $textToStore ..

第2步:

为选择查询编写代码...并直接回显值...

有用


您应该始终将原始数据存储在数据库中。然后在显示数据之前将其转换并消毒。
爱德华

1

这有效:

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


-8

为什么make很难,但如此容易:)

//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照顾的


6
这是不安全的,与这个问题不太相关。
埃文·达尔文

1
只需尝试....发布到电子邮件或SQL .... .... :)
邓肯

在所有答案中,这个答案最不简洁
JacobRossDev
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.