0

これはおそらく簡単ですが、Ajax と JSON の方法で賢い誰かをここで助けることができます。Ajax リクエストを PHP バックエンドに渡す Javascript 関数があります。「request_parameters」投稿変数として JavaScript オブジェクトを渡しています。これが 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\":\"運動距離\",\"名前\":\"運動距離\",\"クラス\":\"入力スパン1左\",\"値\ ":\"25\",\"type\":\"text\",\"startingValue\":null},{\"id\":\"運動距離単位\",\"名前\ ":\"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\":\"exercise\",\"primaryForm\":0}0}0}

わかりました。これは明らかにエンコードされているため、データは悪いことが起こらずに POST/GET 変数として渡されます。けっこうだ。json_decode 関数を実行する前にデコードを使用することで、PHP 側でこれに対処できると考えました。私が最初に試した:

$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有効になっています。

【編集済】

マジック クォートを有効にしている場合は、下のコメントにあるリンクを確認して無効にしてください。盲目的に使用stripslashesし、後でサーバーの設定を変更したり、別のサーバーに移動したりすると、上記のコードが壊れます。

ただし、マジック クォートを無効にすることができない場合は、以下のコードを使用して、この特定の投稿パラメーターからスラッシュを削除します。

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 に答える