使用换行符插入和检索文本

时间:2012-03-12 19:07:01

标签: php javascript html textarea newline

我在textareas中插入换行符有点问题。提交表单后,数据库中的文本显示如下:

“text \ r \ n for”(我在Windows上)

以下文字:
“文字
为“

然后在我从textarea中的数据库中检索相应的文本后,它显示:

“文本\ r \ n \为”

我正在使用PHP并将文本放在textarea中,如下所示:

<textarea name="post_content">{$post_content}</textarea>

我希望它使用换行符而不是\ n或\ r \ n。

正确渲染

3 个答案:

答案 0 :(得分:2)

存储在数据库中的文本只有一个\,这意味着可以转义n,这可以在呈现换行符之前发生。

最简单的解决方法是使用第二个\存储文本,如下所示:

text\\r\\nfor

这将由PHP呈现为:

text\r\nfor

哪个会用换行符创建HTML。

答案 1 :(得分:0)

我最后的赌注是你在使用准备好的陈述并在输入之前逃避你的价值,比如

// newlines will be replaced with '\n' here
$value = mysql_escape_string($_POST["value"]);

$stmt = $dbh->prepare("INSERT INTO myTable (value) VALUES (?)");

// mysql will insert the contents of $value literally. 
// so instead of a newline, you will have '\n' (two characters) in your database
$stmt->bindParam(1, $value);

// if you did this statement, everything would be fine. mysql would see your '\n'
// and replace it back to a newline. 
mysql_query("INSERT INTO myTable (value) VALUES ('$value')");

如果是这种情况,您不必转义您的值。 bindParam会为您完成此操作。以下是您可以安全地将用户输入传输到数据库的两种方法示例。

// not escaped 
$value = $_POST["value"];

// escape characters that have special meaning for mysql
$value2 = mysql_escape_string($_POST["value2"]);

// $value2 gets inserted into the query-string. we needed to 
// escape it's contents to not mix it up with actual SQL code.
$stmt = $dbh->prepare("INSERT INTO myTable (value, value2) VALUES (?, '$value2')");

// $value gets inserted using bindParam. everything is fine here.
$stmt->bindParam(1, $value);

答案 2 :(得分:-1)

您需要做的是在textarea中显示的值中编码新行。您可以在服务器端或客户端html_encode函数中执行此操作。所以基本上你替换所有 \n\r\r\n<br>.让我知道它是否有效