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.
'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
Nicht zu sehen auf MAC 'php -a; php> var_dump ("Hello \ 0 World"); string (12) "Hallo Welt" ' –
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