确定一个字符串是否是 serialize()
函数的结果的最佳方法是什么?
最佳答案
我会说,尝试 unserialize
它;-)
引用手册:
In case the passed string is not unserializeable, FALSE is returned and E_NOTICE is issued.
因此,您必须检查返回值是否为 false
或不是 (使用 ===
或 !==
,以确保对 0
或 null
或任何等于 false
的内容没有任何问题,我会说) .
请注意注意事项:您可能想要/需要使用 @ operator .
例如:
$str = 'hjkl';
$data = @unserialize($str);
if ($data !== false) {
echo "ok";
} else {
echo "not ok";
}
会得到你:
not ok
编辑:哦,就像@Peter 说的(感谢他!),如果你试图反序列化 bool false 的表示,你可能会遇到麻烦:-(
因此,检查您的序列化字符串是否不等于“b:0;
”也可能会有所帮助;我想这样的事情应该可以解决问题:
$data = @unserialize($str);
if ($str === 'b:0;' || $data !== false) {
echo "ok";
} else {
echo "not ok";
}
在尝试反序列化之前测试该特殊情况将是一种优化 - 但如果您不经常有错误的序列化值,则可能没有那么有用。
关于php - 检查字符串是否被序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1369936/