Каков наилучший способ определить, является ли строка результатом serialize()
функции?
источник
Каков наилучший способ определить, является ли строка результатом serialize()
функции?
Я бы сказал, попробуйте unserialize
;-)
Цитирование руководства:
В случае, если переданная строка не является сериализуемой, возвращается FALSE и выдается E_NOTICE.
Итак, вы должны проверить, является ли возвращаемое значение false
или нет (с ===
или !==
, чтобы убедиться, что у вас нет проблем с 0
или null
или с чем-то, что равно false
, я бы сказал) .
Просто остерегайтесь уведомления: возможно, вы захотите / должны использовать оператор @ .
Например :
$str = 'hjkl';
$data = @unserialize($str);
if ($data !== false) {
echo "ok";
} else {
echo "not ok";
}
Вы получите:
not ok
РЕДАКТИРОВАТЬ: О, и как @Peter сказал (спасибо ему!), Вы можете столкнуться с проблемами, если вы пытаетесь десериализовать представление логического false :-(
Таким образом, проверка того, что ваша сериализованная строка не равна " b:0;
", также может быть полезна; что-то вроде этого должно сработать, я полагаю:
$data = @unserialize($str);
if ($str === 'b:0;' || $data !== false) {
echo "ok";
} else {
echo "not ok";
}
тестирование этого особого случая перед попыткой десериализации было бы оптимизацией, но, вероятно, не настолько полезным, если у вас не часто ложное сериализованное значение.
Я не писал этот код, это на самом деле из WordPress. Думаю, я бы включил его для всех, кто заинтересован, это может быть излишним, но это работает :)
источник
^([adObis]:|N;)
Оптимизация ответа Паскаля МАРТИНА
источник
Если $ string является сериализованным
false
значением, т.е.$string = 'b:0;'
функция SoN9ne возвращает значениеfalse
, это неправильнотак что функция будет
источник
In case the passed string is not unserializeable, FALSE is returned and E_NOTICE is issued.
Мы не можем отловить ошибку E_NOTICE, поскольку она не является сгенерированным исключением.Несмотря на отличный ответ Паскаля МАРТИНА, мне было любопытно, если бы вы могли подойти к этому по-другому, поэтому я сделал это просто как умственное упражнение
И это на самом деле работает. Единственное предостережение в том, что он, вероятно, сломается, если у вас есть зарегистрированный обработчик ошибок из-за того, как работает $ php_errormsg .
источник
$a
и десериализацией$b
, что не является практическим дизайном приложения.Правильно обрабатывает дела
serialize(false)
. :)источник
встроить в функцию
источник
a:
(илиb:
т. Д.) Присутствует где-то внутри $ value, а не в начале. И^
здесь не означает начало строки. Это вводит в заблуждение.Есть решение WordPress: (подробности здесь)
источник
источник
У меня это нормально работает
источник
Я предпочитаю делать это так:
источник