Как узнать, является ли строка сериализованным объектом / массивом или просто строкой?

Есть ли какой-нибудь надежный способ узнать, является ли строковая переменная просто строкой или строковым представлением сериализованного объекта / массива?

Ну, вы можете сказать, глядя на формат. Когда вы сериализуете массив, вы получаете строку, которая выглядит как 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() и проверить return is_array($result) и is_object($result)

Вы можете вызвать функцию unserialize(string $str) : она возвращает false , если строка не может быть несериализована.