Qual é a melhor maneira de determinar se uma sequência é ou não o resultado da serialize()
função?
fonte
Qual é a melhor maneira de determinar se uma sequência é ou não o resultado da serialize()
função?
Eu diria, tente unserialize
;-)
Citando o manual:
Caso a sequência passada não seja desserializável, FALSE será retornado e E_NOTICE será emitido.
Portanto, você deve verificar se o valor de retorno é false
ou não (com ===
ou !==
, para ter certeza de não ter nenhum problema com 0
ou null
ou qualquer coisa que seja igual a false
, eu diria) .
Apenas tome cuidado com o aviso: você pode querer / precisar usar o operador @ .
Por exemplo :
$str = 'hjkl';
$data = @unserialize($str);
if ($data !== false) {
echo "ok";
} else {
echo "not ok";
}
Você receberá:
not ok
EDIT: Ah, e como @ Peter disse (graças a ele!), Você pode ter problemas se estiver tentando desserializar a representação de um falso booleano :-(
Portanto, verificar se sua string serializada não é igual a " b:0;
" também pode ser útil; algo assim deve funcionar, suponho:
$data = @unserialize($str);
if ($str === 'b:0;' || $data !== false) {
echo "ok";
} else {
echo "not ok";
}
testar esse caso especial antes de tentar desserializar seria uma otimização - mas provavelmente não é útil se você não tiver um valor serializado falso com frequência.
Eu não escrevi esse código, é do WordPress, na verdade. Pensei em incluí-lo para qualquer pessoa interessada, pode ser um exagero, mas funciona :)
fonte
^([adObis]:|N;)
Otimizando a resposta de Pascal MARTIN
fonte
Se a string $ é um
false
valor serializado , ou seja , a função do$string = 'b:0;'
SoN9ne retornafalse
, está erradoentão a função seria
fonte
In case the passed string is not unserializeable, FALSE is returned and E_NOTICE is issued.
Não podemos pegar o erro E_NOTICE, pois não é uma exceção lançada.Apesar da excelente resposta de Pascal MARTIN, fiquei curioso para saber se você poderia abordar isso de outra maneira, então fiz isso apenas como um exercício mental
E realmente funciona. A única ressalva é que provavelmente será interrompida se você tiver um manipulador de erros registrado por causa do funcionamento do $ php_errormsg .
fonte
$a
e desserializar$b
, o que não é um design de aplicativo prático.Lida corretamente com o caso de
serialize(false)
. :)fonte
construir em uma função
fonte
a:
(oub:
etc) está presente em algum lugar dentro do valor $, não no começo. E^
aqui não significa começo de uma string. É totalmente enganador.Existe a solução WordPress: (o detalhe está aqui)
fonte
fonte
Este trabalho é bom para mim
fonte
Eu prefiro fazer dessa maneira:
fonte