Beim Umgang mit serialisierten Daten kann ein Fehler auftreten „unserialize() [function.unserialize]: Fehler beim Offset.“ Dieser Fehler tritt normalerweise aufgrund ungültiger Serialisierungsdaten auf, die durch eine falsche Byte-Zähllänge verursacht werden.
Während der Serialisierung berechnet PHP die Länge jedes Elements im serialisierten Array mithilfe von strlen( ) Funktion. Wenn die Daten jedoch Zeichen wie doppelte Anführungszeichen enthalten, die eine besondere Behandlung (z. B. Escapezeichen) erfordern, kann die Byteanzahl falsch werden.
Um diesen Fehler zu beheben, ist dies der Fall Es ist erforderlich, die Länge jedes Elements im serialisierten Array manuell neu zu berechnen:
$data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data);
Neben der schnellen Lösung ist es wichtig, die Ursache für die fehlerhafte Serialisierung zu ermitteln. Beachten Sie die folgenden Schritte:
$toDatabase = base64_encode(serialize($data)); // Save to database $fromDatabase = unserialize(base64_decode($data)); //Getting saved format
Obwohl die Fehlermeldung einen allgemeinen Hinweis auf das Problem gibt, ist sie oft hilfreich Bestimmen Sie dazu den genauen Speicherort der beschädigten Daten, indem Sie die Funktion findSerializeError verwenden, die zwei serialisierte Zeichenfolgen vergleicht und die Unterschiede zwischen ihnen, einschließlich falscher Bytes, identifiziert zählt:
function findSerializeError($data1) { echo "<pre class="brush:php;toolbar:false">"; $data2 = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data1); // ... }
Durch die Bereitstellung detaillierter Informationen zum Fehler hilft diese Funktion, Serialisierungsprobleme zu identifizieren und zu beheben.
Das obige ist der detaillierte Inhalt vonWie behebt man „unserialize(): Error at offset' in PHP-serialisierten Strings?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!