2011-04-18 77 views
0

我通过jquery发布了下面的javascript endcodeURI值到一个PHP脚本,我使用urldecode并将值存储在数据库中,但不存储'>'符号。PHP urldecode问题

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); 
    } 
} 

在此先感谢

+1

1.什么是你的SQL查询存储数据? 2.“ans”有哪些列类型? – cweiske 2011-04-18 20:08:13

+0

你可以显示创建查询的代码吗?错误可能在于此。 – ANisus 2011-04-18 20:08:22

+0

可能需要显示如何插入代码,以及如何对它进行url解码以帮助查找问题。 – pickypg 2011-04-18 20:09:10

回答

0

尝试扭转的urldecode(mysql_escape_string($v))顺序。在数据转换为实际进入数据库之前,您正在转义数据。

2

我不知道是否有任何这将解决你的问题,但在你的代码的一些问题:

  1. mysql_escape_string已过时,你应该使用mysql_real_escape_string
  2. 您应该在转义(例如:mysql_real_escape_string(urldecode($str));)之前urldecode
  3. 甚至不必逃脱任何东西。您正在使用准备好的语句(最可能是语法中的PDO)。 PDO将自动使用占位符为您跳转值。
  4. 您可能是双重解码。如果您发布的查询字符串作为请求正文直接发送到PHP,它将自动解码。因此,您可能会对已解码的网址进行url解码。
  5. 您直接引用$testid(而不是$_POST['test_id'])的事实让我觉得您可能正在使用register_globals。可能并非如此,只是为了确保。

除此之外,代码看起来不错,不应该使>符号消失。检查你的MySQL列类型和/或尝试var_dumping $ _POST并检查你在那里。

+0

非常感谢。我试过var_dump,'>'符号缺失。会有什么问题?我可以看到ajax发送正确的编码数据到php脚本testid = 723006807&VI-28 = adads%3Easdasda%3EAsdasd%3EAsdasda%3Easdasda& – Kaartz 2011-04-18 20:54:57