【问题标题】:stripslashes and mysql_escape_string not removing all slashesstripslashes 和 mysql_escape_string 不删除所有斜杠
【发布时间】:2013-03-22 21:14:41
【问题描述】:

我遇到了与带斜杠有关的问题。我无法将我的 Javascript 代码转换为 json_decode,因为我相信斜线会侵入。

这是我所拥有的:

      $str = stripslashes ($_POST['setImage']); 
  $setImage = mysql_escape_string($str);
  if(json_decode($str) == NULL)
    {
        echo("not valid json!");

    }else{
        $imageUrls = json_decode($setImage);

    }

从这里获取信息:

<img src="<?php echo $photo['picurl']; ?>" onclick='javascript: setCoverForSet(
                {"photo_id": "<?php echo $photo['photo_id']; ?>", 
                 "original": "<?php echo $photo['piclink']; ?>", 
                 "thumbnail": "<?php echo $photo['picurl']; ?>"});'/>

                <input type="text" value='{"photo_id": <?php echo $photo['photo_id']; ?>, "original": <?php echo $photo['piclink']; ?>, "thumbnail": <?php echo $photo['picurl']; ?>}' name="photos[]" />

这是我打印时输出的内容

{\"photo_id\": \"2\", \"original\": \"content/employees/1/1363556600bsmiles.jpg\", \"thumbnail\": \"content/employees/thumbs/1/thumb_1363556600bsmiles.jpg\"}

引号必须在输入中,否则将无法正常工作。

感谢您的帮助。

美国东部时间 03 月 22 日 7:58 更新

我最终将它发送到数据库中的一个表。

这是整个声明:

$str = stripslashes ($_POST['setImage']); 
  $setImage = mysql_escape_string($str);
  if(json_decode($str) == NULL)
    {
        echo("not valid json!");

    }else{
        $imageUrls = json_decode($setImage);

    }

  $photos = mysql_escape_string($_POST[photos]);
  $piclink = print $imageUrls->{'thumbnail'};
  $piclurl = print $imageUrls->{'original'};
  $title = mysql_escape_string($_POST[title]);
  $firstname = mysql_escape_string($_POST[firstname]);
  $lastname = mysql_escape_string($_POST[lastname]);
  $todaysdate = date("Y-m-d");


  mysql_query("UPDATE staff SET title = '".$title."', staff_firstname = '".$firstname."', 
                           staff_lastname = '".$lastname."', 
                           piclink = '".$piclink."', 
                           picurl = '".$picurl."', 
                           last_update = '".$todaysdate."' WHERE staff_id = $EID") or die(mysql_error());

我唯一能想到的是多余的斜杠干扰了 json_decode。 我只放了 echo 语句,以便我可以看到帖子之后传递的内容。

我在执行 mysql_escape_string 时确实尝试过删除斜线,如下所示:

$setImage = mysql_escape_string(stripslashes ($_POST['setImage']));

但给出了相同的结果。

【问题讨论】:

  • stripslashes 撤消了magic_quotes 损坏(请仔细阅读!),但是您将反斜杠应用到mysql_escape_string,这是加倍愚蠢的,因为您没有将字符串发送到数据库,无论如何这将是错误的功能。
  • 请解释一下,你在哪里打印什么。请使用您的调试语句增强您的代码。最后显示您在表单中输入的内容以及脚本打印的内容。

标签: php javascript mysql


【解决方案1】:

我想出了这个以防万一有人感兴趣。

我摆脱了 mysql_escape_string 并消除了斜线。尽管如此,仍然使用了条形斜线。

我还从解码区域删除了打印语句。现在一切正常,它将字符串移入它应该在的数据库中。

这是新代码:

      $setImage = stripslashes ($_POST['setImage']); 

  if(json_decode($setImage) == NULL)
    {
        echo("not valid json!");

    }else{
        $imageUrls = json_decode($setImage);

    }

  $photos = mysql_escape_string($_POST[photos]);
  $piclink = $imageUrls->{'thumbnail'};

  $picurl = $imageUrls->{'original'};

  $title = mysql_escape_string($_POST[title]);
  $firstname = mysql_escape_string($_POST[firstname]);
  $lastname = mysql_escape_string($_POST[lastname]);
  $todaysdate = date("Y-m-d");


  mysql_query("UPDATE staff SET title = '".$title."', staff_firstname = '".$firstname."', 
                           staff_lastname = '".$lastname."', 
                           piclink = '".$piclink."', 
                           picurl = '".$picurl."', 
                           last_update = '".$todaysdate."' WHERE staff_id = $EID") or die(mysql_error());


     echo "<b><font color='#999999'> Staff edit succeeded</font></b><br />";

【讨论】:

    【解决方案2】:

    简单使用正则表达式并删除所有不需要的符号对您来说效率更高,

    继续阅读http://php.net/manual/en/function.preg-match.php

    【讨论】:

    • 我不确定这会发生在哪里。我在上面说过,代码必须有引号才能将信息传递给视图框,然后使用它来解码。
    • 您可以使用正则表达式获取字符串并查找、删除或替换 char 或 subString 为另一个值,看看这个网站它可以帮助您生成您需要的代码---- > txt2re.com/index-php.php3?s=Hello%20look%20at%20/…
    猜你喜欢
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多