Ho avuto 2 casi in cui i byte null \0
vengono aggiunti ai miei dati.Perché var_dump non mostra byte null?
1.Casting oggetto di un array
class myClass {
private $var;
function __construct() {}
}
$myObject = (array) new myClass();
var_dump(array_map("addslashes", array_keys($myObject)));
Uscite:
array(1) { [0]=> string(14) "\0myClass\0var" }
2.When decifrare i dati crittografati:
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)));
Uscite:
string(39) "123456789aasdasd\0\0\0\0\0\0\0"
Ma non avrei mai notato la funzione \0
se non la addslashes
. Perché solo var_dump()
non li mostra? var_dump("Hello\0 World");
per esempio output 'Hello World'. A mio parere, rappresentazione errata dei dati. E per quanto ne so, \0
byte è fine dell'array di caratteri (stringa in PHP) in C e PHP è implementato in C.
'var_dump (" Hello \ 0 World ");' _does_ mostra il carattere. È il tuo browser che non lo rende chiaro. Prova questo codice dalla riga di comando, ricevo 'string (12)" Hello \ 000 World "' come output. – jszobody
Non vedi \ 0 su MAC 'php -a; php> var_dump ("Hello \ 0 World"); string (12) "Hello World" ' –
Sono su un mac pure .php -a; php> var_dump ("Hello \ 0 World"); string (12) "Hello \ 000 World" 'Non sei sicuro del motivo per cui stai ottenendo risultati diversi – jszobody