Quelle est la meilleure façon de déterminer si une chaîne est le résultat de la serialize()
fonction?
la source
Quelle est la meilleure façon de déterminer si une chaîne est le résultat de la serialize()
fonction?
Je dirais, essayez- unserialize
le ;-)
Citant le manuel:
Dans le cas où la chaîne transmise n'est pas non sérialisable, FALSE est renvoyé et E_NOTICE est émis.
Donc, vous devez vérifier si la valeur de retour est false
ou non (avec ===
ou !==
, pour être sûr de ne pas avoir de problème avec 0
ou null
ou quoi que ce soit qui équivaut à false
, je dirais) .
Attention: vous voudrez peut-être / devrez peut-être utiliser l' opérateur @ .
Par exemple :
$str = 'hjkl';
$data = @unserialize($str);
if ($data !== false) {
echo "ok";
} else {
echo "not ok";
}
Vous obtiendrez:
not ok
EDIT: Oh, et comme @Peter l'a dit (grâce à lui!), Vous pourriez avoir des problèmes si vous essayez de désérialiser la représentation d'un booléen false :-(
Donc, vérifier que votre chaîne sérialisée n'est pas égale à " b:0;
" peut également être utile; quelque chose comme ça devrait faire l'affaire, je suppose:
$data = @unserialize($str);
if ($str === 'b:0;' || $data !== false) {
echo "ok";
} else {
echo "not ok";
}
tester ce cas particulier avant d'essayer de désérialiser serait une optimisation - mais probablement pas si utile, si vous n'avez pas souvent une fausse valeur sérialisée.
Je n'ai pas écrit ce code, il vient de WordPress en fait. Je pensais l'inclure pour toute personne intéressée, cela pourrait être exagéré mais cela fonctionne :)
la source
^([adObis]:|N;)
Optimiser la réponse de Pascal MARTIN
la source
Si la $ string est une
false
valeur sérialisée , c'est-à-dire$string = 'b:0;'
que la fonction de SoN9ne retournefalse
, c'est fauxdonc la fonction serait
la source
In case the passed string is not unserializeable, FALSE is returned and E_NOTICE is issued.
Nous ne pouvons pas attraper l'erreur E_NOTICE car ce n'est pas une exception levée.Malgré l'excellente réponse de Pascal MARTIN, j'étais curieux de savoir si vous pouviez aborder cela d'une autre manière, alors je l'ai fait juste comme un exercice mental
Et cela fonctionne réellement. La seule mise en garde est qu'il se cassera probablement si vous avez un gestionnaire d'erreurs enregistré à cause du fonctionnement de $ php_errormsg .
la source
$a
et la désérialisation$b
, ce qui n'est pas une conception d'application pratique.Gère correctement le cas de
serialize(false)
. :)la source
intégrer à une fonction
la source
a:
(oub:
etc) est présent quelque part dans $ value, pas au début. Et^
ici ne signifie pas le début d'une chaîne. C'est totalement trompeur.Il existe une solution WordPress: (le détail est ici)
la source
la source
Cela fonctionne bien pour moi
la source
Je préfère le faire de cette façon:
la source