2011-10-03 22 views
2

我在Flash中构建了一个包含JSON编码的对象数组的请求。这是使用as3corelib编码的。然后通过ExternalInterface将该请求传递给JavaScript,并通过jquery ajax调用将请求发送给服务器。json_decode - 来自AJAX的格式错误的JSON请求

在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已启用。这可能是问题吗?

+2

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

+0

是的,将utf8_encode改为stripslashes完成了这项工作。 @hakre - 如果您作为答案发布,代表是您的代表 – shanethehat

回答

3

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

因此,如果您知道magic_quotes_gpc已启用,则需要先剥离斜线。

对于字符集,请注意您知道在哪个字符集中编码数据,而不是已编码的utf-8,并且您认为它是latin-1并再次进行转换。