将textarea保存到MySQL并保留换行符
想象一下博客或cms系统(PHP和MySQL)。我想让用户在textarea中输入一些文本并将其保存到数据库中。数据库中字段的类型是TEXT。将textarea保存到MySQL并保留换行符
我想保留换行符并稍后打印它们。我知道我可以用PHP的nl2br
这个函数做到这一点,但是如何保护这个字符串免受SQL注入攻击(让我们假设我不能使用预处理语句)。如果我使用mysql_real_escape_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_real_escape_string
不删除换行符,它逃脱他们。
它应该工作没关系存储时,以及(与htmlspecialchars()
可能结合,以防止用户进入原始HTML)将nl2br
当数据为输出逃脱的字符串。这是最好的方式。
+1 Korrect Potter – 2010-08-14 10:00:24
如果我使用mysql_real_escape_string,它不会再显示换行符。
难道你没有看到"\n"
文字代替换行符吗?
如果是这样,你的代码做了一些令人讨厌的事情,很可能你会逃避你的数据两次。
或者,你从数据库获取数据后不做mysql_real_escape_string()吗?
无论如何,你必须做一些调试 - 调查,看看你的数据在每个阶段会发生什么。刚打印出$ _ POST [“textarea_name”],SQL查询等
要见你失去了你休息的那一刻,并找出罪犯
注:
mysql_real_escape_string不保护任何攻击任何东西。它逃脱了分隔符。
nl2br不保存任何东西。它为换行符添加了一个HTML标签。
mysqli_real_escape_string
将用您的回车替换\r\n
,因此您需要使用str_replace()
取回回车。但是,它仍然不会在您的浏览器/电子邮件客户端中可见。这就是nl2br()
发挥作用:
$text = 'one line
another line';
echo nl2br(str_replace("\\r\\n","
", mysqli_real_escape_string($dbc, $text)));
的代码测试,你可以使用它。
不可能。尝试一下,看看。输出中不会有\ r \ n。 – 2010-08-14 10:04:33