我有一个文本区域,当我尝试通过MYSQLi的real_escape函数和nl2br进行转义和清理时,只需输出就会给我带来奇怪的结果。
我的PHP代码:
<?php
$db = new mysqli('localhost', 'user', 'pass', 'demo');
if($db->connect_errno > 0){
die('Unable to connect to database [' . $db->connect_error . ']');
}
$postText = nl2br($db->escape_string($_POST['posting']));
?>
奇数输出为:
i love this\r\n\r\nand this is gonna be funn.,
奇怪的是,当我只使用nl2br
而没有real_escape
时,输出正常,显然无法继续前进,因为我无法信任用户的输入。
请帮忙...
答案 0 :(得分:2)
当输出将用于SQL查询时,您应该只应用SQL转义。
如果您需要将值输出到网页上,请使用htmlspecialchars()
或htmlentities()
。
如果要在JavaScript文字中使用,请使用json_encode()
。
等
简而言之,每个环境都有自己的逃避;不要混淆它们。
此外,将nl2br()
写入数据库时请勿使用{{1}};相反,在从数据库中获取它之后应用它。
答案 1 :(得分:0)
是的,确实如此 此功能的输出不打算打印出来。但是只格式化SQL字符串文字 请注意,此功能不打算“清理”任何输入。请refer here for the details
所以,你永远不应该同时使用这两个功能。
根据你在评论中提出的问题,当你必须立即打印字符串时,不应该出现这种情况
因为在每次POST请求之后,您的PHP都应该使用Location:
标头响应,以告知浏览器重新加载页面。重新加载后,您可以从数据库中读取数据并将其打印出来。