PHP base64_decode返回十六进制或NULL

时间:2016-07-14 16:48:11

标签: php base64

我有一个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

1 个答案:

答案 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()