解析在PHP中格式化为数组的$ _POST

时间:2015-01-01 10:57:01

标签: php arrays post

我在php脚本中收到一个有趣格式化的$ _POST提交,其格式为:

{"receipt-data":"MILGDgYJKoZIhvcNAQcCoILF..."}

如果我打印$ _POST变量,我得到一个Array(),有时候空的时候包含一个字典“receipt-data”:“....”(我还是不明白为什么有时候它是空的,有时候不)。 在它开始空无一人之前,我尝试打印第一个元素,但没有任何有趣的东西。

简单来说,拦截此类发布并获取与收据数据相对应的值的正确方法是什么?

这是(相当长的)发布数据,我为了保持最大消息限额而取消了一些块:

  

阵   (       [{ “收据数据”:“MILOdwYJKoZIhvcNAQcCoILOaDCCzmQCAQExCzAJBgUrDgMCGgUAMIK_KAYJKoZIhvcNAQcBoIK_GQSCvhUxgr4RMAoCAQgCAQEEAhYAMAoCARQCAQEEAgwAMAsCAQECAQEEAwIBADALAgEDAgEBBAMMATgwCwIBCwIBAQQDAgEAMAsCAQ4CAQEEAwIBGzALAgEPAgEBBAMCAQAwCwIBEAIBAQQDAgEAMAsCARkCAQEEAwIBAzAMAgEKAgEBBAQWAjQrMA0CAQ0CAQEEBQIDARHWMA0CARMCAQEEBQwDMS4wMA4CAQkCAQEEBgIEUDIzMTAYAgEEAgECBBB / lJHT84oy2t4czXgoc79YMBsCAQACAQEEEwwR   [...]   Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRlIHBvbGljeSBhbmQgY2VydGlmaWNhdGlvbiBwcmFjdGljZSBzdGF0ZW1lbnRzLjANBgkqhkiG9w0BAQUFAAOCAQEAXDaZTC14t_2Mm9zzd5vydtJ3ME \ / BH4WDhRuZPUc38qmbQI4s1LGQEti_9HOb7tJkD8t5TzTYoj75eP9ryAfsfTmDi1Mg0zjEsb_aTwpr \ / yv8WacFCXwXQFYRHnTTt4sjO0ej1W8k4uvRt3DfD0XhJ8rxbXjt57UXF6jcfiI1yiXV2Q \ / Wa9SiJCMR96Gsj3OBYMYbWwkvkrL4REjwYDieFfU9JmcgijNq9w2Cz97roy \ / 5U2pbZMBjM3f3OgcsVuvaDyEO2rpzGU_12TZ \ / wYdV2aeZuTJC_9jVcZ5_oVK3G72TQiQSKscPHbZNnF5jyEuAF1CqitXa5PzQCQc3sHV1ITGCAcswggHHAgEBMIGjMIGWMQswCQYDVQQGEwJVUzETMBEGA1UECgwKQXBwbGUgSW5jLjEsMCoGA1UECwwjQXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMxRDBCBgNVBAMMO0FwcGxlIFdvcmxkd2lkZSBEZXZlbG9wZXIgUmVsYXRpb25zIENlcnRpZmljYXRpb24gQXV0aG9yaXR5AggYWUMhcnSc \ / DAJBgUrDgMCGgUAMA0GCSqGSIb3DQEBAQUABIIBADAfG0M5Lzrl9bhrTKD9nR18Q8HO6zC6XaGtCYtf8a7cE8voswN59EkVCr0yMpcwYxmRjTllJBxJwbPKx3u81B7shTzN5xYfe26nuKqDZBZDo7FqWZSDOhcZ \ / E6TEylmWg6kHmWXZJuebDFnLKhQwsgl3H \ / atOW4eywXAij_OvPBwPiPc9IBgq4u35oqQL 5d2YV38ukBi \ / ToqT97 \ / WG5qvb1JsUDdFoqRuJyA4CCaa8dBlZGDJar29_CjsniFJDz9 \ / NtUcepZTy3T78POFe2cr_Enrl8E9drcrS4xe5Um9R_CVDNwCgoD1bwYA7M5CjrzNO1dqiXLE59d1i3hgSMS4UxnGLGlXFmlF7DZsjwZil7Eec3XtIaJUlLgnkipOuVUqD1nYw6oBAkCursLDC9AlroN5kWMcEXQXRUgRCItvntJoN897cJX6uXpaaSbiDgXbrwTqnM3 / tzHjJgI5T68eI5Dp0LDdxT5FcSd_y3sePf4eTNrJN / eQDMb44ytDg7GOIsG / qiPyHzunp2FrTZZWBIdDP1MvFmLsRoDqvutNqmX5lw3Hobghzk] => “}   )

解析时使用:

$json=json_encode($_POST);
$data=json_decode($json, TRUE);

$ data采用以下形式:

  

{ “{\” 收据数据\ “:\” MILP9wYJKoZIhvcNAQcCoILP6DCCz_QCAQExCzAJBgUrDgMCGgUAMIK \ / qAYJKoZIhvcNAQcBoIK \ / mQSCv5Uxgr_RMAoCAQgCAQEEAhYAMAoCARQCAQEEAgwAMAsCAQECAQEEAwIBADALAgEDAgEBBAMMATgwCwIBCwIBAQQDAgEAMAsCAQ4CAQEEAwIBGzALAgEPAgEBBAMCAQAwCwIBEAIBAQQDAgEAMAsCARkCAQEEAwIBAzAMAgEKAgEBBAQWAjQrMA0CAQ0CAQEEBQIDARHWMA0CARMCAQEEBQwDMS4wMA4CAQkCAQEEBgIEUDIzMTAYAgEEAgECBBB5fbMSc4WXteSuDDZ20X4pMBsCAQACAQEEEwwRUHJvZHVjdGlvblNhbmRib3gwHAIBBQIBAQQU6dWy7_Sty19JvZ97C3lbZ7GoJG4wHgIBDAIBAQQWFhQyMDE1LTAxLTAxVDIwOjU4OjUxWjAeAgESAgEBBB   [...]   b24gQXV0aG9yaXR5AggYWUMhcnSc \ / DAJBgUrDgMCGgUAMA0GCSqGSIb3DQEBAQUABIIBABjGnbWvGn1GhGrK99iWdL_fezRcgTN961IxTFvxt0Ob69SEgVgM \ / 99DbAOdE5xmVNkXucdNXY6RakQ \ / CgoD1bwYA7M5CjrzNO1dqiXLE59d1i3hgSMS4UxnGLGlXFmlF7DZsjwZil7Eec3XtIaJUlLgnkipOuVUqD1nYw6oBAkCursLDC9AlroN5kWMcEXQXRUgRCItvntJoN897cJX6uXpaaSbiDgXbrwTqnM3 \ / tzHjJgI5T68eI5Dp0LDdxT5FcSd_y3sePf4eTNrJN \ / eQDMb44ytDg7GOIsG \ / qiPyHzunp2FrTZZWBIdDP1MvFmLsRoDqvutNqmX5lw3Hobghzk “:” \ “}”}

这是执行objective-c代码的结果:

NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:storeURL];
    [theRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    NSError *error;
    NSDictionary *requestContents = @{
                                  @"receipt-data": [self.receipt base64EncodedStringWithOptions:0]
                                  };
     NSData *requestData = [NSJSONSerialization dataWithJSONObject:requestContents
                                                      options:0
                                                        error:&error];
    [theRequest setHTTPMethod:@"POST"];
    [theRequest setHTTPBody:requestData];
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    [NSURLConnection sendAsynchronousRequest:theRequest queue:queue
                       completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
       [...]

1 个答案:

答案 0 :(得分:0)

通过查看创建请求的代码,我们可以看到它正在发送格式化为JSON的数据,因此您首先要通过json_decode运行它,例如

$data=json_decode($_POST[0], TRUE);

您首先不需要通过json_encode运行它,因为它已经作为JSON发送给您。

然后对于“收据数据”值本身,我们可以看到objective-c代码将其编码为base64,因此您需要使用base64_decode对其进行解码:

$data['receipt-data'] = base64_decode($data['receipt-data']);
相关问题