我有2个案例,其中空字节\0被附加到我的数据.
1.将对象存储到数组中
class myClass {
private $var;
function __construct() {}
}
$myObject = (array) new myClass();
var_dump(array_map("addslashes", array_keys($myObject)));
Run Code Online (Sandbox Code Playgroud)
输出:
array(1) { [0]=> string(14) "\0myClass\0var" }
Run Code Online (Sandbox Code Playgroud)
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)));
Run Code Online (Sandbox Code Playgroud)
输出:
string(39) "12345678901234567 aasdasd\0\0\0\0\0\0\0"
Run Code Online (Sandbox Code Playgroud)
但\0如果没有addslashes功能,我永远不会注意到.为什么只是var_dump()不显示那些?var_dump("Hello\0 World");例如输出'Hello World'.在我看来,数据表示不好.据我所知,\0字节是C语言中char字符的结尾(PHP中的字符串),PHP是用C实现的.
var_dump按原样输出字符串。如果您的字符串包含一个NUL字节,则该NUL字节将按原样输出。问题是NUL字节通常不会在浏览器中显示为任何内容,甚至可能不会在命令行中显示。
一个迹象是显示的字符串长度与您看到的不同。Astring(42) "abc"里面大概有不少“隐藏”的字符。显然,你的绳子越长,就越难观察到......
var_export使NULbytes 和类似的东西更加明显。
| 归档时间: |
|
| 查看次数: |
402 次 |
| 最近记录: |