想象一个博客或cms系统(PHP和MySQL)。我想让用户在文本区域中输入一些文本并将其保存到数据库中。数据库中字段的类型为文本。
我想保留换行符并在以后打印它们。我知道使用PHP-function可以做到这一点,但是如何保护这个字符串免受nl2br注入攻击(假设我不能使用预准备语句)。如果我在它上面使用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 */发布于 2010-08-14 17:24:42
mysql_real_escape_string不会删除换行符,它会对它们进行转义。
在存储字符串时对字符串进行转义,并在数据为输出时应用nl2br (可能与htmlspecialchars()结合使用,以防止用户输入原始的超文本标记语言)。这是最好的办法。
发布于 2015-01-29 01:33:59
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 )));代码已经过测试,你可以使用它了。
发布于 2010-08-14 17:36:54
如果我对它使用mysql_real_escape_string,它不会再显示换行符。
难道您没有看到"\n"文字代替了换行符吗?
如果是这样的话,你的代码做了一些令人讨厌的事情,很可能你两次逃脱了你的数据。
或者,在从数据库获取数据后不执行mysql_real_escape_string()?
无论如何,您必须进行一些调试-调查,以查看每个stage上的数据发生了什么变化。只需打印出$_POST‘’textarea_name‘、SQL查询等。
看着你失去休息的那一刻,并找出一个违规者
备注:
mysql_real_escape_string不保护任何东西不受任何攻击。它可以转义分隔符。
nl2br不保留任何内容。它为换行符添加一个HTML标记。
https://stackoverflow.com/questions/3482725
复制相似问题