2016-03-18 18 views
5

Ich hatte 2 Fälle, in denen Null-Bytes \0 an meine Daten angehängt werden.Warum var_dump zeigt keine Nullbytes?

1.Casting Objekt auf ein Array

class myClass { 
    private $var; 
    function __construct() {} 
} 
$myObject = (array) new myClass(); 
var_dump(array_map("addslashes", array_keys($myObject))); 

Ausgänge:

array(1) { [0]=> string(14) "\0myClass\0var" } 

2.When verschlüsselten Daten zu entschlüsseln:

function encrypt_data($data) { 
    return base64_encode(mcrypt_encrypt(MCRYPT_BLOWFISH , SALT , $data , MCRYPT_MODE_ECB)); 
} 

function decrypt_data($data) { 
    $data = base64_decode($data); 
    return mcrypt_decrypt(MCRYPT_BLOWFISH , SALT , $data , MCRYPT_MODE_ECB); 
} 

$data = '123456789aasdasd'; 
$edata = encrypt_data($data); 
var_dump(addslashes(decrypt_data($edata))); 

Ausgänge:

string(39) "123456789aasdasd\0\0\0\0\0\0\0" 

Aber ich würde nie \0 s wenn nicht Funktion bemerken. Warum zeigt nur var_dump() diese nicht? var_dump("Hello\0 World"); zum Beispiel Ausgaben "Hallo Welt". Meiner Meinung nach schlechte Darstellung von Daten. Und soweit ich weiß \0 Byte ist Ende des Char-Array (String in PHP) in C und PHP ist in C implementiert.

+2

'var_dump (" Hallo \ 0 Welt ");' _does_ zeigen das Zeichen. Es ist Ihr Browser, der es nicht klarstellt. Versuchen Sie diesen Code von der Befehlszeile, ich bekomme 'string (12)" Hello \ 000 World "' als die Ausgabe. – jszobody

+1

Nicht zu sehen auf MAC 'php -a; php> var_dump ("Hello \ 0 World"); string (12) "Hallo Welt" ' –

+0

Ich bin auf einem Mac als auch.php -a; php> var_dump ("Hello \ 0 World"); string (12) "Hallo \ 000 Welt" 'Nicht sicher, warum Sie unterschiedliche Ergebnisse bekommen – jszobody

Antwort

2

var_dump Ausgänge Strings wie es ist. Wenn Ihre Zeichenfolge ein Byte NUL enthält, wird das Byte NUL unverändert ausgegeben. Das Problem ist, dass ein NUL Byte in der Regel nicht als irgendetwas im Browser oder möglicherweise sogar in der Befehlszeile angezeigt wird.

Es wird angezeigt, dass die angezeigte Zeichenfolgenlänge von der angezeigten Zeichenfolge abweicht. A string(42) "abc" hat wahrscheinlich eine ganze Reihe von "versteckten" Zeichen darin. Offensichtlich wird dies immer schwieriger zu sehen, je länger Ihre Zeichenfolge wird ...

var_export macht NUL Bytes und ähnliches viel offensichtlicher.

+0

Das macht Sinn für mich. Gibt es eine Kombination von 'var_export()' + 'var_dump()'? –

+0

Nicht, dass ich davon weiß. Wenn Sie eine Ahnung haben, dass Sie mit versteckten Charakteren zu tun haben, müssen Sie genauer hinsehen. – deceze