php - 检查字符串是否被序列化?

标签 php serialization

确定一个字符串是否是 serialize() 函数的结果的最佳方法是什么?

https://www.php.net/manual/en/function.serialize

最佳答案

我会说,尝试 unserialize它;-)

引用手册:

In case the passed string is not unserializeable, FALSE is returned and E_NOTICE is issued.

因此,您必须检查返回值是否为 false 或不是 (使用 ===!== ,以确保对 0null 或任何等于 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/

相关文章:

php - 使用短路获取第一个非空变量

.net - 在没有类型引用的情况下反序列化 session 对象?

c++ - 如何序列化类型 boost::labeled_graph

java - Apache Flink fromCollection java.lang.IllegalStateException : unread block data

php - 将分数转换为 html 实体

php - 如何在 digitalocean 应用程序上正确部署 laravel nova

c# - Json转换器 : Return a single object or a List<Object> based on inbound JSON

用不同语言编写的两个程序之间的通信 - 序列化?

Php 从 xml 节点获取特定值(调用节点名称)

php - 如何在邮件中显示ACF的字段?