为什么 var_dump 不显示空字节?
Why var_dump does not show null bytes?
我有 2 次空字节 [=15=]
被附加到我的数据。
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) "[=12=]myClass[=12=]var" }
2.When 解密加密数据:
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 = '12345678901234567 aasdasd';
$edata = encrypt_data($data);
var_dump(addslashes(decrypt_data($edata)));
输出:
string(39) "12345678901234567 aasdasd[=14=][=14=][=14=][=14=][=14=][=14=][=14=]"
但如果没有 addslashes
函数,我永远不会注意到 [=15=]
s。为什么只是 var_dump()
不显示那些? var_dump("Hello[=19=] World");
例如输出 'Hello World'。在我看来,数据表现不佳。据我所知,[=15=]
字节是 C 中 char 数组的结尾(PHP 中的字符串),PHP 在 C 中实现。
var_dump
按原样输出字符串。如果您的字符串包含 NUL
字节,则该 NUL
字节将按原样输出。问题是 NUL
字节通常不会在浏览器中显示为任何内容,甚至可能不会在命令行中显示。
说明显示的字符串长度与您看到的不一样。一个 string(42) "abc"
里面可能有相当多的 "hidden" 个字符。显然,您的字符串越长,这就越难引起注意...
var_export
使 NUL
字节和类似的更加明显。
我有 2 次空字节 [=15=]
被附加到我的数据。
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) "[=12=]myClass[=12=]var" }
2.When 解密加密数据:
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 = '12345678901234567 aasdasd';
$edata = encrypt_data($data);
var_dump(addslashes(decrypt_data($edata)));
输出:
string(39) "12345678901234567 aasdasd[=14=][=14=][=14=][=14=][=14=][=14=][=14=]"
但如果没有 addslashes
函数,我永远不会注意到 [=15=]
s。为什么只是 var_dump()
不显示那些? var_dump("Hello[=19=] World");
例如输出 'Hello World'。在我看来,数据表现不佳。据我所知,[=15=]
字节是 C 中 char 数组的结尾(PHP 中的字符串),PHP 在 C 中实现。
var_dump
按原样输出字符串。如果您的字符串包含 NUL
字节,则该 NUL
字节将按原样输出。问题是 NUL
字节通常不会在浏览器中显示为任何内容,甚至可能不会在命令行中显示。
说明显示的字符串长度与您看到的不一样。一个 string(42) "abc"
里面可能有相当多的 "hidden" 个字符。显然,您的字符串越长,这就越难引起注意...
var_export
使 NUL
字节和类似的更加明显。