如何确定字符串是序列化对象/数组还是字符串?

时间:2011-01-20 15:12:06

标签: php serialization

是否有一些可靠的方法来确定字符串变量是字符串还是序列化对象/数组的字符串表示形式?

2 个答案:

答案 0 :(得分:7)

您可以调用unserialize(string $str)函数:如果字符串无法反序列化,则返回false

答案 1 :(得分:5)

嗯,你可以通过查看格式来判断。序列化数组时,会得到一个类似于a:1:{i:0;s:3:"foo"}的字符串。如果序列化一个对象,则得到:o:7:"myclass":1:{s:3:"foo";s:3:"bar";}

因此,如果你想测试基础,你可以做这两个正则表达式:

^a:\d+:{.*?}$

^o:\d+:"[a-z0-9_]+":\d+:{.*?}$

分别用于数组和对象。

请注意,这只是检查通用表单。要判断它是否是有效的序列化字符串,您需要通过unserialize()运行它并测试返回is_array($result)is_object($result) ...