Php mysqli\u real\u escape\u字符串使程序无用

Php mysqli\u real\u escape\u字符串使程序无用,php,mysql,mysqli,emoticons,Php,Mysql,Mysqli,Emoticons,下面的代码使用mysqli\u real\u escape\u string保护字符串。 但是如果没有mysqli\u real\u escape\u字符串,预期输出无法正常工作,但需要它来保护 $str = mysqli_real_escape_string($con,$_POST['str']); /* get each word in the sentence using for-loop then */ switch($eachword){

下面的代码使用
mysqli\u real\u escape\u string
保护字符串。 但是如果没有
mysqli\u real\u escape\u字符串
,预期输出无法正常工作,但需要它来保护

  $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=mysqli\u real\u escape\u字符串($con,$\u POST['str']);
/*
然后使用for循环获取句子中的每个单词
*/
交换机($eachword){
案例“:)”:$eachword='';
打破
/*
等等等等
*/
}
$newstr.=$eachword;
//用于循环结束
**mysqli_查询($con,“插入tbl(注释)值($newstr)”)**
e、 g

  • 输入:$str=“我在这里:)很好”

  • 预期输出:
    $newstr=“我很好”

  • 当前输出:
    $newstr=“我在这里:)很好”

更新


现在一切正常。感谢支持者。

您正在对一些数据运行
mysqli\u real\u escape\u string
,之前……代码示例中根本没有使用。所以这没有任何意义

在将变量插入SQL字符串之前,请立即使用
mysqli\u real\u escape\u string
。(更好的方法是使用准备好的查询和绑定参数)

如果您试图防御XSS,那么在将变量插入HTML字符串之前,请立即使用
htmlspecialchars

在将用户输入与某些文本进行比较之前,请不要使用这两个选项。

已更新

请注意,您必须已经连接到数据库,才能使用
mysqli\u real\u escape\u string
,因为它考虑了所选数据库的默认字符集。在使用数据库之前是否连接到它

在你的问题中,我甚至没有看到任何疑问。除非要将传递的字符串插入数据库,否则使用
mysqli\u real\u escape\u 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;
}
然后,当您想要显示内容时,假设字符串位于
$content
中,请按如下方式显示:


echo ParseSmiley($content)

为什么需要它来保护?您是否尝试过参数化查询而不是字符串转义?或者甚至有疑问?我想@Quentin已经知道了。你需要htmlspecialchars。注意
mysqli\u real\u escape\u字符串的“mysqli”部分。这是用来写数据库查询的。老实说,为什么要循环每个单词?只需使用str_replace将表情符号替换为标记。。。快多了!是的,我确实需要查询更新的代码什么
XSS
?我在保护用户输入一些
html
内容,这可以使用
htmlentites
来完成,但在插入之前也必须使用
mysqli\u real\u escape\u string
。如果我在插入数据库之前使用
mysqli\u real\u escape\u string
。“”元素即表情符号显示为
html代码
而非图像!!如前所述,您的问题中没有任何内容容易受到任何类型的攻击。如果要将内容插入数据库,则应在将其放入SQL字符串之前立即使用
mysqli\u real\u escape\u string
。不是在你剧本的顶端。如果我在插入数据库之前使用mysqli\u real\u escape\u字符串,“
”元素即表情符号以html代码而不是图像的形式出现!!”-那么你需要看看你从数据库中得到了什么,你用它做了什么,而不是你放进了什么。“那么你需要看看你从数据库中得到了什么以及你用它做了什么,而不是你在数据库中放了什么。”--我能做什么?@quentinthat意味着你可以按原样插入数据库并在显示时输出为“”元素?@user3187838是的,没错。这样,你就不必担心标记中的引号被删除了。
$parsed_string = mysqli_real_escape_string($con,$_POST['str']);

mysqli_query($con,"INSERT INTO tbl (comment) VALUES ($parsed_string)");