为什么var_dump不显示空字节?

时间:2016-03-18 14:31:45

标签: php null var-dump

我有2个案例,其中空字节\0被附加到我的数据中。

1.将对象存储到数组

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 = '12345678901234567 aasdasd';
$edata = encrypt_data($data);
var_dump(addslashes(decrypt_data($edata)));

输出:

string(39) "12345678901234567 aasdasd\0\0\0\0\0\0\0" 

但如果不是\0函数,我永远不会注意到addslashes。为什么var_dump()没有显示那些? var_dump("Hello\0 World");例如输出' Hello World'。在我看来,数据表示不好。据我所知\0字节是C数组的字符串结尾(PHP中的字符串),而C语言实现了PHP。

1 个答案:

答案 0 :(得分:2)

var_dump按原样输出字符串。如果您的字符串包含NUL字节,那么NUL字节将按原样输出。问题是NUL字节通常不会显示在浏览器中,甚至可能显示在命令行中。

表示显示的字符串长度与您看到的不同。 string(42) "abc"可能有很多"隐藏"其中的人物。显然,你的琴弦越长,眼球就会变得越来越难......

var_export使NUL个字节和类似字节更加明显。

相关问题