保留 TextArea 中的换行符
Posted
技术标签:
【中文标题】保留 TextArea 中的换行符【英文标题】:Preserve Line Breaks From TextArea 【发布时间】:2017-05-17 00:38:25 【问题描述】:我正在使用 textarea 使用户能够输入 cmets。但是,如果用户输入新行,则输出时不会出现新行。有什么办法可以让换行符保持不变。
知道如何保留换行符吗?
【问题讨论】:
我刚刚禁用了htmlawed,好像和换行无关,换行还是不显示。所以我只是将textarea数据直接写入mysql,当我从mysql数据库回显数据时它没有显示出来。 我还使用 phpmyadmin 浏览了 mysql 表并看到了评论字段。没有标签被存储, 我正在做一个 Facebook 风格的评论系统,所以我真的不希望它是所见即所得的。不知道为什么不保留换行符? keep textarea input format after using mysql_real_escape_string to store的可能重复 【参考方案1】:两种解决方案:
PHP函数nl2br()
:
例如,
echo nl2br("This\r\nis\n\ra\nstring\r");
// will output
This<br />
is<br />
a<br />
string<br />
将输入包装在<pre></pre>
标签中。
见: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
是从 nl2br
和 htmlentities
返回的文本,因此它可以安全地显示在 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
【讨论】:
以上是关于保留 TextArea 中的换行符的主要内容,如果未能解决你的问题,请参考以下文章
将 div HTML 复制到 textarea 但保留换行符 [重复]