Php 将textarea保存到MySQL并保留换行符

Php 将textarea保存到MySQL并保留换行符,php,mysql,html,sql-injection,Php,Mysql,Html,Sql Injection,想象一个博客或cms系统(PHP和MySQL)。我想让用户在文本区域中输入一些文本,并将其保存到数据库中。数据库中字段的类型为文本 我想保留换行符,以后再打印。我知道我可以用PHP的nl2br-函数来实现这一点,但是如何保护这个字符串免受SQL注入攻击(假设我不能使用预先准备好的语句)。如果我在它上面使用mysql\u real\u escape\u string,它就不再显示换行符 $text = 'one line another line'; $text = mysql_real_esca

想象一个博客或cms系统(PHP和MySQL)。我想让用户在文本区域中输入一些文本,并将其保存到数据库中。数据库中字段的类型为文本

我想保留换行符,以后再打印。我知道我可以用PHP的
nl2br
-函数来实现这一点,但是如何保护这个字符串免受SQL注入攻击(假设我不能使用预先准备好的语句)。如果我在它上面使用
mysql\u real\u escape\u string
,它就不再显示换行符

$text = 'one line
another line';
$text = mysql_real_escape_string($text);
/* save to db, fetch it some time later */
echo nl2br($text); /* output: one line\r\nanotherline */

mysql\u real\u escape\u string
不会删除换行符,而是将其转义

在存储字符串时,可以对其进行转义,并在数据输出时应用
nl2br
(可能与
htmlspecialchars()
结合使用,以防止用户输入原始HTML)。那是最好的办法

如果我在上面使用mysql\u real\u escape\u字符串,它就不再显示换行符

$text = 'one line
another line';
$text = mysql_real_escape_string($text);
/* save to db, fetch it some time later */
echo nl2br($text); /* output: one line\r\nanotherline */
您没有看到“\n”文字代替换行符吗?
如果是这样,您的代码会做一些令人讨厌的事情,很可能您会两次逃逸数据。
或者,从数据库获取数据后,您不执行mysql\u real\u escape\u string()吗

无论如何,您必须进行一些调试—一项调查,以查看每个阶段的数据发生了什么变化。只需打印$\u POST['textarea\u name'],SQL查询等。
看看你失去休息的那一刻,找出一个罪犯

注:
mysql\u real\u escape\u字符串不保护任何东西免受任何攻击。它逃避分隔符。

nl2br不保存任何内容。它会在换行符中添加一个HTML标记。

mysqli\u real\u escape\u string
将用
\r\n
替换您的回车符,因此您需要使用
str\u replace()
将其取回。但是,它在浏览器/电子邮件客户端中仍然不可见。这就是
nl2br()
发挥作用的地方:

$text = 'one line
another line';
echo nl2br(str_replace("\\r\\n","
", mysqli_real_escape_string($dbc, $text )));
代码经过测试,您可以使用它