Php 插入和检索带有换行符的文本

Php 插入和检索带有换行符的文本,php,javascript,html,textarea,newline,Php,Javascript,Html,Textarea,Newline,我在文本区域中插入换行有点问题。提交表单后,数据库中的文本显示如下内容: “text\r\n”(我在windows上) 对于以下文本: “文本 为了“ 然后,在我从数据库中检索文本区域中的相应文本后,它显示: “文本\r\n\for” 我正在使用PHP并将文本放在textarea中,如下所示: <textarea name="post_content">{$post_content}</textarea> {$post\u content} 我希望它使用换行符而不是\

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

“text\r\n”(我在windows上)

对于以下文本:
“文本
为了“

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

“文本\r\n\for”

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

<textarea name="post_content">{$post_content}</textarea>
{$post\u content}

我希望它使用换行符而不是\n或\r\n正确地呈现。

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

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

text\\r\\nfor
然后,PHP会将其呈现为:

text\r\nfor

这将创建带有换行符的HTML。

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

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

text\\r\\nfor
然后,PHP会将其呈现为:

text\r\nfor

这将创建带有换行符的HTML。

您需要做的是在文本区域中显示的值中对新行进行编码。您可以在服务器端或客户端的html_编码功能中执行此操作。所以基本上你把所有的
\n
\r
\r\n
使用

让我知道它是否有效

您需要做的是在文本区域中显示的值中对新行进行编码。您可以在服务器端或客户端的html_编码功能中执行此操作。所以基本上你把所有的
\n
\r
\r\n
使用

让我知道它是否有效

我的最后一个赌注是,您正在使用预先准备好的语句,并且在输入之前还将值转义,如

// 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);

我的最后一个赌注是,您正在使用预先准备好的语句,并且在输入之前额外地逃逸您的值,例如

// 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);

在回显内容之前,请尝试使用
str\u replace()
剥离“\r”。例如:
str\u替换(“\r\n”,“\n”)我现在很困惑。您只是想删除所有的
\r
,还是在您的文本区域中有2个符号\r\n和\r\n而不是新行?我想\n或\r\n(windows对应项)呈现为新行而不是普通的“\r\n\”文本。如果数据库中有
\r\n\
作为5个单独的符号,用于将此数据输入数据库的代码有问题。换行符
\n
永远不会作为两个单独的字符存储在任何位置。这只是编程语言告诉编译器或解释器这里需要换行符的简写。例如
echo strlen(“\n”)\n
被解释为单个新行字符时,code>将输出
1
。您可能希望向我们展示处理textarea内容并将其放入数据库的代码。我在查询中发送的所有变量上都使用mysql\u escape\u字符串。这可能是原因吗?是的,我在数据库字符串中看到了\r\n。在回显内容之前,请尝试使用
str\u replace()
剥离“\r”。例如:
str\u替换(“\r\n”,“\n”)我现在很困惑。您只是想删除所有的
\r
,还是在您的文本区域中有2个符号\r\n和\r\n而不是新行?我想\n或\r\n(windows对应项)呈现为新行而不是普通的“\r\n\”文本。如果数据库中有
\r\n\
作为5个单独的符号,用于将此数据输入数据库的代码有问题。换行符
\n
永远不会作为两个单独的字符存储在任何位置。这只是编程语言告诉编译器或解释器这里需要换行符的简写。例如
echo strlen(“\n”)\n
被解释为单个新行字符时,code>将输出
1
。您可能希望向我们展示处理textarea内容并将其放入数据库的代码。我在查询中发送的所有变量上都使用mysql\u escape\u字符串。这可能是原因吗?是的,我在我的数据库字符串中看到了\r\n。谢谢,我认为这是问题所在:D,要进行必要的更改。不,不起作用:(,现在我在文本区域中得到rn,当我用\\r\\n str\u replace\r\n替换为\\r\\n时,我发现了我的问题所在,我使用的是mysql\u escape\u字符串,它为每个\n和\r字符预加了一个反斜杠:(因此,
mysql\u escape\u string()
会自动将
\n
转换为
\\n
?是。
mysql\u escape\u string
会转义对传输有特殊意义的所有字符。如果需要字符串
\n
(两个字符)要在数据库中显示这样的内容,请在其上使用
mysql\u escape\u string
。反斜杠是一个需要转义的特殊字符。如果在换行符上应用
mysql\u escape\u string
,它将被两个字符
\n
替换。如果再次应用
mysql\u escape\u string
,您将以结束ode>\\n
。谢谢,我想这就是问题所在:D,要做必要的更改。不,不起作用:(,现在我在文本区域中得到rn,当我用\\r\\n str\u replace\r\n替换为\\r\\n时,我发现了我的问题所在,我使用的是mysql\u escape\u字符串,它在每个\n和\r字符前都加了反斜杠:(所以
mysql\u escape\u string()
正在自动将
\n
转换为
\\n