为什么 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 字节和类似的更加明显。