unserialize() Error at offset… Einige Ansätze

Nicht immer ist das Problem offensichtlich und dazu gehört eine Fehlerausgabe im Bezug auf die Funktion unserialize(). In diesem Umfeld kommt es auf Grund unsauberer Daten im übergebenen Wert ab und an zu Problemen. Schaut man sich im Netz dazu um, findet man unzählige Hilfesuche und wenige Antworten, da meist das Problem in Quelle liegt, im Wert der übergeben wird. Aber nicht immer hat man darauf Einfluss, insbesondere bei Debugginghelfern kommen da unterschiedliche Inhalte.

Um einigen Hilfesuchenden zu helfen, hier einige Lösungsvorschläge, die man abarbeiten kann. Einige sind nur im Zusammenhang mit WordPress zu nutzen, da die Funktion aus dem Core kommt. Ähnliche Sachen gibt es natürlich auch ohne WP.

Die Erste Lösung ist direkt in den Kommentaren von PHP.net zur Funktion hinterlegt.


$object = preg_replace( '!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", $object );

Ähnlich geht der folgende Ansatz:


$object = preg_replace( '/;n;/', ';N;', $object );

Alternativ schwören andere auf die Verwendung von trim()


$object = trim( $object );

Aber auch mit diesen Lösungen kommt man nicht immer ans Ziel und die Abfrage, ob es sich um serialisierte Daten handelt muss her. Normalerweise kümmert sich unserialize() darum, aber wie gesagt; nicht immer hilft dies. WordPress stellt eigene Funktionen dafür zur Verfügung.

  • is_serialized( $data )
  • is_serialized_string( $data )

Mit diesen beiden Funktion kann sauber abgefragt werden.
Aber auch da kann man mit einem einfachen Snippet ran; eventuell nicht der Weisheit letzter Schluss, daher lieber die Funktionen nutzen oder außerhalb von WP eine eigene Funktion, siehe Gist 1415653.


$is_serialized = preg_match( "/^(O:|a:)/", $object );

Vielleicht hilft es dem einen oder anderen, ansonsten nutze ich es als Gedächtnisstütze.

Kommentare sind geschlossen.