我有一个base64字符串:
AgAAOwEwMzEyMTMwMDAwMDAwOTA0QG5haS5lcGMubW5jMTMwLm1jYzMxMi4zZ3BwbmV0d29yay5vcmc=
我可以使用原始base64,复制并粘贴它并通过bash的base64 -d或php_decode()
运行它并且它可以工作。但是当我在PHP中使用file_get_contents(' php:// input')从帖子中获取变量时,它无法正常工作。但是,我可以使用error_log()
记录JSON编码的帖子,并在那里复制并粘贴表单,它可以工作。我可以回显base64值,一切看起来都很正常。但是只要我在字符串周围包装base64_decode,就会出错。如果重要,则解码字符串的前两个字符是&#34 ;; 0"。我想可能会导致PHP假设它的十六进制?
对于凌乱的调试代码感到抱歉,但这应该说明一些例子。
$sub_id = get_field($json[$i], "subscriber-id", "null");
error_log("type: " . gettype($sub_id));
error_log("$i raw: |$sub_id|");
$decoded = base64_decode($sub_id);
error_log("$i decoded: $decoded");
error_log("$i raw sub-id: " . $sub_id);
$iccid_a = array();
$raw_sub_id = $sub_id;
$ret = exec("echo \"$raw_sub_id\" | base64 -d ",$iccid_a);
error_log(print_r($iccid_a,1));
我得到了这个输出:
type:string
0 raw:|AgAAOwEwMzEyMTMwMDAwMDAwOTA0QG5haS5lcGMubW5jMTMwLm1jYzMxMi4zZ3BwbmV0d29yay5vcmc=|
0解码:\ x02
0 raw sub-id:AgAAOwEwMzEyMTMwMDAwMDAwOTA0QG5haS5lcGMubW5jMTMwLm1jYzMxMi4zZ3BwbmV0d29yay5vcmc=
数组\ n(\ n [0] => \ x02
答案 0 :(得分:1)
您的解码数据以某些不可打印的字符开头,这些字符可能与您用作显示器的内容无法很好地匹配。
$ php -r 'echo base64_decode("AgAAOwEwMzEyMTMwMDAwMDAwOTA0QG5haS5lcGMubW5jMTMwLm1jYzMxMi4zZ3BwbmV0d29yay5vcmc=");' | hexdump -C
00000000 02 00 00 3b 01 30 33 31 32 31 33 30 30 30 30 30 |...;.03121300000|
00000010 30 30 39 30 34 40 6e 61 69 2e 65 70 63 2e 6d 6e |00904@nai.epc.mn|
00000020 63 31 33 30 2e 6d 63 63 33 31 32 2e 33 67 70 70 |c130.mcc312.3gpp|
00000030 6e 65 74 77 6f 72 6b 2e 6f 72 67 |network.org|
0000003b
我不知道您期望解码数据到底是什么样的,但问题不在于base64_decode()
。