PHP url解码问题


PHP urldecode issue

我通过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);
    }   
}

Thanks in advance

我不知道这些是否会解决你的问题,但是你的代码中有一些问题:

  1. mysql_escape_string已弃用,您应该使用mysql_real_escape_string。
  2. 你应该在转义之前对进行urldecode(例如:mysql_real_escape_string(urldecode($str));)。
  3. 甚至不需要转义任何。您正在使用准备好的语句(很可能是语法中的PDO)。PDO会自动用占位符转义值。
  4. 您可能正在进行双重解码。如果您提交的查询字符串作为请求体直接发送到PHP,它将被自动解码。因此,您可能正在对已经解码的URL进行URL解码。
  5. 您直接引用$testid(而不是$_POST['test_id'])的事实使我认为您可能正在使用register_globals。可能不是这样,但只是为了确保。

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

试着颠倒urldecode(mysql_escape_string($v))的顺序。在将数据转换为实际进入数据库的内容之前,您正在对数据进行转义。