Wie kann am besten festgestellt werden, ob eine Zeichenfolge das Ergebnis der serialize()
Funktion ist oder nicht ?
quelle
Wie kann am besten festgestellt werden, ob eine Zeichenfolge das Ergebnis der serialize()
Funktion ist oder nicht ?
Ich würde sagen, versuch unserialize
es ;-)
Zitat des Handbuchs:
Falls die übergebene Zeichenfolge nicht unserialisierbar ist, wird FALSE zurückgegeben und E_NOTICE ausgegeben.
Sie müssen also überprüfen, ob der Rückgabewert ist false
oder nicht (mit ===
oder !==
, um sicherzugehen, dass Sie kein Problem mit 0
oder null
oder etwas haben, das gleich ist false
, würde ich sagen) .
Beachten Sie nur den Hinweis: Möglicherweise möchten / müssen Sie den Operator @ verwenden .
Zum Beispiel :
$str = 'hjkl';
$data = @unserialize($str);
if ($data !== false) {
echo "ok";
} else {
echo "not ok";
}
Kriege dich :
not ok
EDIT: Oh, und wie @Peter sagte (danke an ihn!), Könnten Sie in Schwierigkeiten geraten, wenn Sie versuchen, die Darstellung eines booleschen Falsches zu unserialisieren :-(
Daher kann b:0;
es auch hilfreich sein, zu überprüfen, ob Ihre serialisierte Zeichenfolge nicht gleich " " ist. so etwas sollte den Trick machen, nehme ich an:
$data = @unserialize($str);
if ($str === 'b:0;' || $data !== false) {
echo "ok";
} else {
echo "not ok";
}
Das Testen dieses Sonderfalls vor dem Versuch, unserialisiert zu werden, wäre eine Optimierung - aber wahrscheinlich nicht so nützlich, wenn Sie nicht oft einen falsch serialisierten Wert haben.
Ich habe diesen Code nicht geschrieben, er stammt eigentlich aus WordPress. Ich dachte, ich würde es für alle Interessierten einschließen, es könnte übertrieben sein, aber es funktioniert :)
quelle
^([adObis]:|N;)
Optimierung der Reaktion von Pascal MARTIN
quelle
Wenn der $ string ein serialisierter
false
Wert ist,$string = 'b:0;'
gibt die Funktion von SoN9ne zurückfalse
, ist dies falschso wäre die Funktion
quelle
In case the passed string is not unserializeable, FALSE is returned and E_NOTICE is issued.
Wir können den E_NOTICE-Fehler nicht abfangen, da es sich nicht um eine ausgelöste Ausnahme handelt.Trotz der hervorragenden Antwort von Pascal MARTIN war ich neugierig, ob Sie dies anders angehen könnten, also tat ich dies nur als mentale Übung
Und es funktioniert tatsächlich. Die einzige Einschränkung ist, dass es wahrscheinlich kaputt geht, wenn Sie einen registrierten Fehlerbehandler haben, weil $ php_errormsg funktioniert .
quelle
$a
und Deserialisierung keine Fehlerprüfung durchführen$b
, was kein praktisches Anwendungsdesign ist.Behandelt den Fall von richtig
serialize(false)
. :) :)quelle
in eine Funktion einbauen
quelle
a:
(oderb:
usw.) irgendwo innerhalb von $ value vorhanden ist, nicht am Anfang. Und^
hier heißt das nicht, dass eine Zeichenfolge beginnt. Es ist total irreführend.Es gibt WordPress-Lösung: (Detail ist hier)
quelle
quelle
Das funktioniert gut für mich
quelle
Ich mache es lieber so:
quelle