我在textareas中插入换行符有点问题。提交表单后,数据库中的文本显示如下:
“text \ r \ n for”(我在Windows上)
以下文字:
“文字
为“
然后在我从textarea中的数据库中检索相应的文本后,它显示:
“文本\ r \ n \为”
我正在使用PHP并将文本放在textarea中,如下所示:
<textarea name="post_content">{$post_content}</textarea>
我希望它使用换行符而不是\ n或\ r \ n。
正确渲染答案 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>.
让我知道它是否有效