У меня было 2 случая, когда к моим данным добавляются нулевые байты \0
.Почему var_dump не показывает нулевые байты?
1.Casting объект в массив
class myClass {
private $var;
function __construct() {}
}
$myObject = (array) new myClass();
var_dump(array_map("addslashes", array_keys($myObject)));
Выходы:
array(1) { [0]=> string(14) "\0myClass\0var" }
2.При дешифрования зашифрованных данных:
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)));
Выходы:
string(39) "123456789aasdasd\0\0\0\0\0\0\0"
Но я бы никогда не заметил \0
с, если нет addslashes
функция. Почему только var_dump()
не показывает их? var_dump("Hello\0 World");
, например, выдает «Hello World». По-моему, плохое представление данных. И насколько я знаю, \0
байт - это конец массива символов (строка в PHP) в C и PHP реализован в C.
'var_dump (« Hello \ 0 World »);' _does_ показать символ. Это ваш браузер, который не дает понять. Попробуйте этот код из командной строки, я получаю 'string (12)« Hello \ 000 World »' как вывод. – jszobody
Не видите \ 0 на MAC 'php -a; php> var_dump ("Hello \ 0 World"); string (12) «Hello World» ' –
Я тоже на mac.'php -a; php> var_dump ("Hello \ 0 World"); string (12) «Hello \ 000 World» 'Не знаю, почему вы получаете разные результаты – jszobody