0

这可能很容易,但我真的可以用 Ajax 和 JSON 的方式使用更聪明的人来提供帮助。我有 Javascript 函数将 Ajax 请求传递给 PHP 后端。我将一个 javascript 对象作为“request_parameters”后变量传递。当这出现在 PHP 上时,我可以导航它,但对象结构已被数组替换。相反,我希望对象结构保持完整,因此作为足够聪明的危险类型,我决定对对象进行 JSON 编码:

 request_parameters: JSON.encode( requestObj );

与只是

 request_parameters: requestObj;

在 PHP 方面,我现在将其作为“request_parameters”变量(又名 $_POST['request_paramenters'])的值:

{\"forms\":[{\"formName\":\"main-form\",\"formClass\":\"lg-form main-form\",\"formFields\":[{\" id\":\"activity-app_id\",\"name\":\"activity-app_id\",\"value\":\"0\",\"type\":\"hidden\", \"startingValue\":null},{\"id\":\"activity-start_time\",\"name\":\"activity-start_time\",\"value\":\"\",\ "type\":\"hidden\",\"startingValue\":null},{\"id\":\"min-duration\",\"name\":\"min-duration\",\ "class\":\"span1 form-ignore\",\"value\":\"50\",\"type\":\"text\",\"startingValue\":null},{\" ID\”:\”activity-duration\",\"name\":\"activity-duration\",\"value\":\"3000000\",\"type\":\"hidden\",\"startingValue\": null},{\"id\":\"运动距离\",\"名称\":\"运动距离\",\"class\":\"输入span1 left\",\"value\ ":\"25\",\"type\":\"text\",\"startingValue\":null},{\"id\":\"exercise-distance-uom\",\"name\ ":\"exercise-distance_uom\",\"value\":\"miles\",\"type\":\"hidden\",\"startingValue\":null},{\"id\": \"exercise-pace_average\",\"name\":\"exercise-pace_average\",\"value\":\"2\",\"type\":\"hidden\",\"startingValue\":null},{\"id\":\"wp_posts-post_content\",\"name\":\"wp_posts-post_content\",\"class\":\"span5\" ,\"value\":\"super fast\",\"type\":\"textarea\",\"startingValue\":null}]}],\"action\":\"went-running\ ",\"post_type\":\"练习\",\"primaryForm\":0}0}0}

好的,所以这显然是经过编码的,这样数据就可以作为 POST/GET 变量传递而不会发生坏事。很公平。我想我可以在 PHP 端通过在运行 json_decode 函数之前使用解码来解决这个问题。我第一次尝试:

$request_parameters = json_decode( urldecode($request_parameters) );

确信这将是一个赢家。没有。它没有给出错误,但 $request_parameters 似乎没有设置任何东西。好的,然后我有点发疯了,想……“嘿,也许 javascript 使用了 base64 编码”……这导致我:

$request_parameters = json_decode( base64_decode($request_parameters) );

坏朱朱。我会把它留在那里。

任何帮助将不胜感激。

4

2 回答 2

2

尝试json_decode(stripslashes($_POST['request_parameters']));

您可能已magic_quotes启用。

[已编辑]

If you have got Magic Quotes enabled, check the link provided in the comment below and disable it. If you use stripslashes blindly and later change the server settings or move to a different server, the above code will break.

If however disabling Magic Quotes is not a possible option in your case, then use the below code for stripping the slashes from this particular post parameter.

if (get_magic_quotes_gpc()) {
  $request_parameters = stripslashes($_POST['request_parameters']);
}
$request_parameters = json_decode($request_parameters);
于 2012-09-28T13:08:08.820 回答
-2

json_decode($_POST['request_parameters']);应该是你所需要的。

于 2012-09-28T13:03:02.577 回答