是否有一些可靠的方法来确定字符串变量是字符串还是序列化对象/数组的字符串表示形式?
答案 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)
...