PHP URL解码问题

PHP URL解码问题,php,Php,我通过jquery将下面的javascript endcodeURI值发布到一个PHP脚本中,在那里我使用urldecode并将该值存储在db中,但没有存储'>'符号 testid=174742228&VI-42=zdddfsdsdf%3Edsdfsdfs%3Efsdfsdfs& +------+-----------+-----+-----+------------------------------+------+ | id | testid | sec | qi

我通过jquery将下面的javascript endcodeURI值发布到一个PHP脚本中,在那里我使用urldecode并将该值存储在db中,但没有存储'>'符号

testid=174742228&VI-42=zdddfsdsdf%3Edsdfsdfs%3Efsdfsdfs&

+------+-----------+-----+-----+------------------------------+------+
| id   | testid    | sec | qid | ans                          | img  |
+------+-----------+-----+-----+------------------------------+------+
| 6510 | 174742228 | VI  |  42 | zdddfsdsdf dsdfsdfs fsdfsdfs | NULL |
+------+-----------+-----+-----+------------------------------+------+

foreach ($_POST as $k => $v) {
    $flds = explode("-", $k);
    if (count($flds) == 3) {
        $datai = array($flds[0], $flds[1], $flds[2], $testid, urldecode(mysql_escape_string($v)));
        $resi = $dbh->prepare("INSERT INTO result (sec, img, qid, testid, ans) VALUES (?, ?, ?, ?, ?)");
        $resi->execute($datai);
    } else {
        $data = array($flds[0], $flds[1], $testid, urldecode(mysql_escape_string($v)));
        $res = $dbh->prepare("INSERT INTO result (sec, qid, testid, ans) VALUES (?, ?, ?, ?)");
        $res->execute($data);
    }   
}

提前感谢

尝试颠倒
urldecode(mysql\u escape\u string($v))的顺序
。在将数据转换为实际进入数据库的数据之前,您正在对其进行转义。

我不知道这是否能解决您的问题,但您的代码中存在一些问题:

  • mysql\u escape\u string
    已弃用,您应该使用
  • 您应该在转义(例如:
    mysql\u real\u escape\u string(urldecode($str));
    之前进行urldecode
  • 你甚至不必逃避任何事情。您正在使用准备好的语句(很可能是语法中的PDO)。PDO将为您自动转义带有占位符的值
  • 你可能是双重解码。如果您发布的查询字符串作为请求体直接发送到PHP,则会自动解码。因此,您可能正在对已解码的URL进行URL解码
  • 您直接引用
    $testid
    (而不是
    $\u POST['test\u id']
    )的事实使我认为您可能正在使用register\u globals。这可能不是事实,但只是为了确保

  • 除此之外,代码看起来很好,不应该使
    符号消失。检查您的MySQL列类型和/或尝试$\u POST并检查您在那里得到了什么

    一,。存储数据的sql查询是什么?2.
    ans
    有哪种列类型?能否显示创建查询的代码?错误可能就在那里。可能需要显示有关如何插入它以及如何对其进行URL解码的代码以帮助找到问题。
    foreach($\u POST as$k=>$v){$flds=explode(“-”,$k);if(count($flds)==3){$datai=array($flds[0],$flds[1],$flds[2],$testid,urldecode(mysql\u escape\u string($v)))$resi=$dbh->prepare(“插入结果(sec,img,qid,testid,ans)值(?,?,?,?,?)”;$resi->execute($datai);}否则{$data=array($flds[0],$flds[1],$testid,urldecode(mysql_escape_string($v));$res=$dbh->prepare(“插入结果(sec,qid,testid,ans)值(?,,,?,,,,?)”);$res->execute($data);}}
    请编辑您的问题,而不是将代码作为注释发布。:)谢谢。我尝试了var_dump,但缺少
    符号。有什么问题吗?我可以看到ajax正在将正确的编码数据发送到php脚本
    testid=723006807&VI-28=adads%3Easdasda%3EAsdasd%3Easdasda%3Easdasda&