2013-10-15 131 views
3

我有一個非常奇怪的base64_decode函數輸出。輸出是一個長度爲18的字符串,但是當我var_dump字符串..長度是32! 這會影響我正在應用此字符串的preg_match函數。 任何想法爲什麼?php base64_decode奇怪的輸出

$input_line = base64_decode('OQA3ADgAMAA5ADgAMgA3ADQAMwA2ADAANwA5ADAAMAAwADAA'); 
var_dump($input_line); 

輸出

string(36) "978098274360790000" 

問候

+1

有可能在那裏不可打印的字符,例如完全無效。如果遍歷'$ input_line'的每個字符並打印出每個字符的ascii值,則會發現它們隱藏的位置。可能位於字符串的末尾。 –

+1

如果您強制使用數據類型,那麼vardump仍會產生相同的結果? '的var_dump($ input_line(INT));' – MonkeyZeus

回答

4

該字符串具有大量的非打印字符(NUL字節)。您可以通過管道將值通過程序像xxd看到這一點:

 
0000000: 3900 3700 3800 3000 3900 3800 3200 3700 9.7.8.0.9.8.2.7. 
0000010: 3400 3300 3600 3000 3700 3900 3000 3000 4.3.6.0.7.9.0.0. 
0000020: 3000 3000        0.0. 
0

該字符串包含NUL字節的數字之間:

基於64位字符串解碼爲:

 
0000000: 3900 3700 3800 3000 3900 3800 3200 3700 9.7.8.0.9.8.2.7. 
0000010: 3400 3300 3600 3000 3700 3900 3000 3000 4.3.6.0.7.9.0.0. 
0000020: 3000 3000        0.0. 

你可以通過shell命令獲得此文件

echo OQA3ADgAMAA5ADgAMgA3ADQAMwA2ADAANwA5ADAAMAAwADAA | base64 -D | xxd