下面的代码使用字符串保护其使用mysqli_real_escape_string
。
但是如果没有mysqli_real_escape_string
但是需要保护,那么预期输出工作正常。
$str = mysqli_real_escape_string($con,$_POST['str']);
/*
get each word in the sentence using for-loop then
*/
switch($eachword){
case ':)': $eachword = '<img src="smile.gif">';
break;
/*
and so forth and so on
*/
}
$newstr .= $eachword;
//for-loop ends
**mysqli_query($con,"insert into tbl(comment)VALUES($newstr)");**
例如
输入:$ str =“我在这里:)很好”;
预期输出:$newstr="here i am <img src="smile.gif"> fine";
curernt输出:$newstr="here i am :) fine";
更新
现在一切正常。感谢支持者。
答案 0 :(得分:4)
您之前的某些数据正在运行mysqli_real_escape_string
...在您的代码示例中根本没有使用。所以它没有任何意义。
在将变量插入SQL字符串之前,立即使用mysqli_real_escape_string
。 (更好的是,使用准备好的查询和绑定参数)。
如果您尝试防御XSS,请在将变量插入HTML字符串之前立即使用htmlspecialchars
。
在将用户输入与某些文字进行比较之前,请不要使用它们。
答案 1 :(得分:1)
已更新
请注意,您必须已连接到数据库才能使mysqli_real_escape_string
正常工作,因为它会考虑所选数据库的默认字符集。您在使用数据库之前是否连接到数据库?
在你的问题中,我甚至没有看到查询。除非您要将传递的字符串插入数据库,否则使用mysqli_real_escape_string
没有任何优势。
现在我看到你用标签替换了smileys,然后你将它插入数据库。但是,如果我是你,我会做以下事情:
function ParseSmiley($str)
{
$smileys = array(
':)' => "<img src='smile.gif' />" //Put all your smileys in this array
);
$parsed_string = strtr($str, $smileys);
return $parsed_string;
}
当您将内容插入数据库时,请勿将其转换为标记。相反,当您显示它时,请使用函数ParseSmiley()
$parsed_string = mysqli_real_escape_string($con,$_POST['str']);
mysqli_query($con,"INSERT INTO tbl (comment) VALUES ($parsed_string)");
然后,当您想要显示内容时,假设该字符串位于$content
中,请显示如下:
echo ParseSmiley($content);