PHP base64_decode 正在返回十六进制或 NULL

PHP base64_decode is returning hex or NULL

我有一个base64字符串:

AgAAOwEwMzEyMTMwMDAwMDAwOTA0QG5haS5lcGMubW5jMTMwLm1jYzMxMi4zZ3BwbmV0d29yay5vcmc=

我可以获取原始的 base64,复制并粘贴它,然后通过 bash 的 base64 -d 或 php_decode() 运行 它并且它有效。但是,当我在 PHP 中使用 file_get_contents('php://input') 从 post 中获取变量时,它将无法工作。但是,我可以使用 error_log() 记录 JSON 编码的 post 并在那里复制和粘贴表格,它可以工作。我可以回显 base64 值,一切看起来都很正常。但是,一旦我将 base64_decode 包裹在字符串周围,就会出现错误。如果重要的话,解码字符串的前两个字符是“;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));

我得到这个输出:

类型:字符串

0 原始:|AgAAOwEwMzEyMTMwMDAwMDAwOTA0QG5haS5lcGMubW5jMTMwLm1jYzMxMi4zZ3BwbmV0d29yay5vcmc=|

0 解码:\x02

0 个原始子 ID:AgAAOwEwMzEyMTMwMDAwMDAwOTA0QG5haS5lcGMubW5jMTMwLm1jYzMxMi4zZ3BwbmV0d29yay5vcmc=

Array\n(\n [0] => \x02

您的解码数据以一些不可打印的字符开头,这些字符可能无法很好地与您用作显示的任何内容一起播放。

$ 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()