2016-07-14 52 views
0

我有一個base64字符串:PHP BASE64_DECODE將返回十六進制或NULL

AgAAOwEwMzEyMTMwMDAwMDAwOTA0QG5haS5lcGMubW5jMTMwLm1jYzMxMi4zZ3BwbmV0d29yay5vcmc= 

我可以把原始的base64,複製和粘貼,並通過bash的的base64 -d或php_decode()運行它,它的工作原理。但是,當我在PHP中使用file_get_contents('php:// input')在PHP中獲取變量時,它無法工作。不過,我可以使用error_log()登錄JSON編碼的帖子,並在那裏複製和粘貼表單,它可以工作。我可以回顯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

回答

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 |[email protected]| 
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()