json_decode - 来自AJAX请求的格式错误的JSON

时间:2011-10-03 12:30:33

标签: php jquery actionscript-3 json

我在Flash中构建一个包含JSON编码的对象数组的请求。这是使用as3corelib编码的。然后,请求通过ExternalInterface传递给JavaScript,jquery ajax调用将请求发送到服务器。

在PHP中,传入的数据被解析,但json_decode返回null,从而产生格式错误的JSON错误。 var_dump导致评论:

<?php
    (isset($_POST['gdata']) && !empty($_POST['gdata'])) ? $gamedata = $_POST['gdata'] : returnError("game data not specified");
    var_dump($gamedata);                             // (String) = string(37) "[{\"duration\":1,\"id\":\"game2\"}]"
    $gamedata = json_decode(utf8_encode(trim($gamedata)),true);
    var_dump($gamedata);                             // null
    $gamedata = json_decode("[{\"duration\":1,\"id\":\"game2\"}]",true);
    var_dump($gamedata);
    /*
    array(1) {
      [0]=>
      object(stdClass)#1 (2) {
        ["duration"]=>
        int(1)
        ["id"]=>
        string(7) "game2"
      }
    }
    */
?>

我不明白的是,尝试解码变量会返回null,但是从文字字符串解码的相同文本可以正常工作。我该怎么做才能清理传入的数据并使其对json_decode可读?

编辑:php_info()表示已启用magic_quotes_gpc。这可能是问题吗?

1 个答案:

答案 0 :(得分:3)

magic_quotes_gpc可能是问题,是的。如果你盲目地重新编码,不知道字符集也可能是一个问题。

因此,如果您知道magic_quotes_gpc已启用,则需要先删除斜杠。

对于charset,请注意你知道编码数据编码的字符集,而不是它已经utf-8编码,你认为它是latin-1并再次转换它。