Php 插入和检索带有换行符的文本
我在文本区域中插入换行有点问题。提交表单后,数据库中的文本显示如下内容: “text\r\n”(我在windows上) 对于以下文本: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} 我希望它使用换行符而不是\
“文本
为了“ 然后,在我从数据库中检索文本区域中的相应文本后,它显示: “文本\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
?