我有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。
答案 0 :(得分:2)
var_dump
按原样输出字符串。如果您的字符串包含NUL
字节,那么NUL
字节将按原样输出。问题是NUL
字节通常不会显示在浏览器中,甚至可能显示在命令行中。
表示显示的字符串长度与您看到的不同。 string(42) "abc"
可能有很多"隐藏"其中的人物。显然,你的琴弦越长,眼球就会变得越来越难......
var_export
使NUL
个字节和类似字节更加明显。