Command Palette

Search for a command to run...

PHP unserialize online: Lesen Sie serialisierte Daten ohne PHP-Server

PHP unserialize online: Lesen Sie serialisierte Daten ohne PHP-Server

T
Toolz Team
|Jul 10, 2026|13 min read

Das erste Mal, dass mich PHP-Daten an einem Nachmittag serialisiert haben, war ein WP-Adminify-Support-Ticket. Die Einstellungen des Dashboard-Widgets waren durcheinander und die "Einstellungen" wurden in der Beschreibung gelebt wp_options Tabelle als einzelne serialisierte Zeichenfolge, die wie Linienrauschen aussah: a:4:{s:8:"_builtin";b:1;...drohen Ich konnte es nicht lesen, ich konnte auf einen Blick nicht sagen, was falsch war, und ich wollte keine vollständige PHP-Umgebung nur zu aufdrehen print_r Eine Reihe. An diesem Nachmittag ist es mir wichtig, einen Decoder zu haben, der nur einen Browser-Tab entfernt ist.

Wenn Sie in WordPress, WooCommerce, Laravel oder einer älteren PHP-Codebasis arbeiten, haben Sie serialisierte Daten getroffen, ob Sie möchten oder nicht. Es wird in Optionstabellen, Sitzungsdateien, Cache-Speichern und Post-Meta angezeigt. Und wenn etwas kaputt geht, ist es der Unterschied zwischen einer fünfminütigen Fixierung und einem Nachmittag, es zu lesen.

Dieser Leitfaden behandelt das, was das serialisierte Format tatsächlich ist, wie man es mit dem dekodiert unterwürgen Tool auf toolz.dev und - vor allem - die einzige Einschränkung, die Sie kennen müssen, bevor Sie der Ausgabe auf nicht-englische Daten vertrauen.

tl; dr: PHP serialize() Packt Werte in eine typisierte Zeichenfolge wie a:2:{s:4:"name";s:5:"Alice";...} wo jedes Stück seinen Typ und seine Länge trägt. der Werkzeug untergeordnet analysiert das in Ihrem Browser und zeigt es als Baum an, print_r, var_dump, oder JSON — kein PHP-Server, kein Daten-Upload. Große Einschränkung Ich habe mich selbst überprüft: Es zählt die Zeichenfolgenlänge in UTF-16-Codeeinheiten, nicht in Bytes. Daher können serialisierte Daten mit Akzenten, Emoji oder CJK-Zeichen falsch analysiert oder fehlgeschlagen werden. Für ASCII-Daten ist es zuverlässig. Es liest Daten, es löst keine Objektreferenzen auf oder lässt Sie an Ort und Stelle bearbeiten.

Was ist wirklich PHP-Serialisierung?

Serialisierung verwandelt einen PHP-Wert - ein Array, ein Objekt, eine Zeichenfolge, eine Ganzzahl, was auch immer - in eine flache Zeichenfolge, die Sie in einer Datenbankspalte oder in einer Datei speichern und später wieder aufbauen können unserialize()drohen Zwei Funktionen erledigen die Arbeit: serialize() konvertiert einen Wert in die Zeichenfolge und unserialize() konvertiert es zurück.

Was das Format lesbar macht, sobald Sie den Code kennen, ist, dass jeder Wert seinen Typ und seine Größe ankündigt. Hier der ganze Wortschatz:

s:5:"hello"              // string:  s:length:"value"
i:42                     // integer: i:value
d:3.14                   // double:  d:value
b:1                      // boolean true (b:0 is false)
N;                       // null
a:2:{...}                // array:   a:count:{key;value;...}
O:8:"ClassName":1:{...}  // object:  O:namelen:"Class":propcount:{...}

Ein serialisiertes assoziatives Array sieht also so aus:

a:3:{s:4:"name";s:10:"John Smith";s:5:"email";s:16:"[email protected]";s:4:"role";s:5:"admin";}

Welches ist genau dieses PHP-Array, dicht gepackt:

array(
    'name'  => 'John Smith',
    'email' => '[email protected]',
    'role'  => 'admin'
)

Kompakt für die Maschine, fast unlesbar für einen Menschen um 14 Uhr bei einem Support-Anruf. Das ist das ganze Problem, das das Tool löst.

Wie dekodiert das Toolz.dev Tool das Tool?

Sie fügen die Zeichenfolge ein und analysieren das Format direkt in Javascript in Ihrem Browser und rendern das Ergebnis. Ich habe jedes dieser Elemente gegen den eigenen Parser getestet, während ich dies schreibe. Das Verhalten unten ist also das, was es tatsächlich tut, nicht das, was ein Handbuch annimmt.

Sequentielle Arrays mit ganzzahligen Schlüsseln werden als echte Liste zurückgegeben. a:2:{i:0;s:5:"apple";i:1;s:6:"banana";} entschlüsseln ["apple", "banana"]drohen Assoziative Arrays werden als Keyed-Objekte zurückgegeben. Verschachtelte Strukturen nisten richtig, Arrays in Arrays in Objekten bis ganz nach unten.

Objekte behalten ihren Klassennamen. O:4:"User":2:{s:4:"name";s:3:"Bob";...} dekodiert mit a __class__ markieren "User" Plus seine Eigenschaften, so dass Sie sowohl den Typ als auch die Daten sehen können. Es behandelt sogar den unangenehmen Fall privater und geschützter Eigenschaften, die PHP mit Null-Byte-Präfixen um den Klassennamen serialisiert - das Tool entfernt diese und zeigt Ihnen den Namen der sauberen Eigenschaft.

Sie erhalten acht Ausgabeformate zum Umschalten zwischen: Baumansicht, print_r, var_dump, var_export, Krumo, FirePHP, DBUG und Plain JSON. Ich lebe in Tree View zum Erkunden und JSON zum Kopieren in etwas anderes, aber wenn Ihr Muskelgedächtnis es erwartet var_dump Ausgabe, es ist genau dort.

Die eine Einschränkung, die Sie kennen müssen: Multibyte-Strings

Dies ist der Teil, den ich jemanden sagen möchte, bevor ich einem Decoder auf Produktionsdaten vertraute. Hier ist es also im Voraus.

Das serialisierte Format von PHP misst die Länge der Strings Bytesdrohen Das Tool misst es in Länge der JavaScript-Strings, die UTF-16-Code-Einheiten zählt. Für einfache ASCII sind diese die gleiche Nummer, so dass englische Daten perfekt dekodiert werden. In dem Moment, in dem eine Zeichenfolge ein Multibyte-UTF-8-Zeichen enthält, divergieren sie.

Nehmen Sie das Wort "café." in UTF-8. Das "é" ist zwei Bytes, daher serialisiert PHP es als s:5:"café" — Länge fünf, Bytes zählen. Das Tool liest das 5 und schnappt sich fünf Codeeinheiten aus der Saite, die café" - Es verschluckt das Schlusszitat und verliert seinen Platz. Ich habe genau das gelaufen: ein eigenständiger s:5:"café"; Dekodiert auf den falschen Wert und innerhalb eines Arrays wie a:2:{s:1:"a";s:5:"café";s:1:"b";i:1;} es scheitert direkt mit Unknown type ':' at position 25drohen

Die praktische Erkenntnis: Wenn Sie WordPress-Optionen, die reine ASCII-Optionen sind, debuggen - die meisten Plugin-Einstellungen, Slugs, Boolesche Flaggen -, geht es Ihnen gut. Wenn die serialisierten Daten akzentuierte Namen, Emoji oder CJK-Text enthalten, kann die Dekodierung beschädigt oder fehlerhaft sein, und das ist ein echter Fehler im Tool, nicht in Ihren Daten. (Für die Aufzeichnung ist die Korrektur an unserem Ende eher nach UTF-8-Bytelänge als .length;; es ist auf meiner Liste.) Wenn Sie darauf stoßen, sind die serialisierungsfähigen Befehle von WP-CLI auf dem Server der zuverlässige Fallback.

Es gibt eine verwandte, sanftere Einschränkung: die var_dump Ausgabe von Reports String-Längen mit derselben Code-Unit-Zahl, also var_dump("café") Vorführungen string(4) Wo echtes PHP sagen würde string(5)und ein Emoji zeigt eine Länge, die auch nicht mit der Anzahl der PHPs übereinstimmt. Lesen Sie diese Zahlen als "Javascript-Länge" nicht "PHP-Bytelänge".

Warum müssen Sie Daten außerhalb von PHP unterbinden?

Viele Gründe, und fast keine von ihnen ist "zum Spaß".

Debuggen ist das große. Ein Fehlerbericht besagt, dass die Einstellungen des Benutzers falsch sind; die Einstellungen sind ein serialisiertes Blob in der Datenbank; das Problem kann erst angezeigt werden, wenn Sie es dekodieren. Der von mir verwendete Arbeitsablauf ist: SELECT option_value FROM wp_options WHERE option_name = 'widget_text';, Kopieren Sie das Ergebnis, fügen Sie es in die Werkzeug untergeordnetund lies den Baum. Zehn Sekunden gegenüber dem Schreiben eines wegwerfenden PHP-Skripts.

Migrationen sind die hinterhältigen. Durch serialisierte Zeichenfolgen betten ihre eigenen Längen ein, sodass ein naiver Suchen und Ersetzen in einem Datenbank-Dump - beispielsweise beim Austausch einer alten Domäne gegen eine neue - den Inhalt der Zeichenfolge ändert, ohne das Längenpräfix zu aktualisieren, und jeder betroffene Wert wird nicht mehr serialisierbar. Die Dekodierung zeigt Ihnen zunächst genau, welche Werte die Domain tragen, damit Sie wissen, was eine einfache Suche und Ersetzung unterbricht. (Das richtige Werkzeug für den Austausch selbst ist WP-CLI search-replace, was die Serialisierung versteht.)

Dann gibt es Cache- und Sitzungsinspektionen - Redis, Memcached und Datei-Caches in PHP-Apps enthalten häufig serialisierte Werte - und Sicherheitsüberprüfungen, bei denen Sie sehen müssen, was tatsächlich gespeichert ist, bevor Sie beurteilen können, ob es sicher ist.

Ist die Dekodierung serialisierter Daten im Browser sicher?

Sicherer als in PHP und es wert, warum.

Php & # 39; ist gebürtig unserialize() hat eine lange Sicherheitshistorie. Füttert eine gefertigte Zeichenfolge, kann sie beliebige Objekte instanziieren und ihre magischen Methoden auslösen (__wakeup, __destruct), die unter den richtigen Bedingungen zu einem Objektinjektionsangriff und im schlimmsten Fall zur Ausführung von Remotecode wird. Deshalb ist der ständige Rat, niemals anzurufen unserialize() auf nicht vertrauenswürdige Eingaben und zu übergeben ['allowed_classes' => false] Wenn du musst.

Das Browser-Tool umgeht all das, weil es nie Läufe PHP Es liest das String-Format und zeigt die Struktur an - es werden keine PHP-Objekte erstellt, es werden keine magischen Methoden ausgelöst und es gibt keinen Interpreter, der ausgenutzt werden kann. Die Daten bleiben auch auf Ihrem Gerät, sie werden lokal analysiert und niemals an einen Server gesendet. Dies ist wichtig, wenn es sich bei dem serialisierten Blob um eine Sitzung handelt oder etwas anderes, das Sie lieber nicht hochladen möchten. Also für inspizierend Nicht vertrauenswürdige serialisierte Daten, der Browser ist wirklich der sicherere Ort.

Native PHP unserialize() toolz.dev-Browser-Tool
Instanziiert Objekte Ja (Einspritzrisiko) Nein - Nur die Struktur lesen
Läuft auf einem Server ja Nein – Lokal im Browser
Sicher bei nicht vertrauenswürdigen Eingaben nur mit allowed_classes Ja, es wird nie ausgeführt
Behandelt Multibyte-Längen richtig (Bytes) nicht zuverlässig (Code-Einheiten)
Auflösung von Objektreferenzen ja Nein - Shows [Reference]
Zweck Live-Werte rekonstruieren Inspizieren und lesen

Diese Tabelle ist auch eine ehrliche Zusammenfassung des Kompromisses: Das Browser-Tool ist der sichere Leser und kein Ersatz für die Sprachfunktion.

Was sind die gängigen realen Quellen?

Wenn Sie hier sind, ist es wahrscheinlich eine davon. WordPress stützt sich stark auf die Serialisierung in wp_options - widget_text, sidebars_widgets, theme_mods_*, die aktive Plugin-Liste, cron Zeitpläne. WooCommerce speichert Produktvarianten, Attribute und benutzerdefinierte Felder als serialisiertes Post-Meta, weshalb ein Produkt mit falscher Preisgestaltung so oft auf einen serialisierten Wert zurückgeht. Laravel verwendet Serialisierung für den Dateicache und den Sitzungsspeicher. Das Konfigurationssystem von Magento ist voll davon. Überall gleiches Format, gleicher Decodierungsansatz.

Ein paar Dinge, die das Tool nicht tut

Zwei ehrliche Grenzen. Es werden keine Referenzen aufgelöst - PHP kann einen Zeiger auf einen früheren Wert (r: oder R:), und das Werkzeug zeigt diese als wörtliche [Reference] Marker anstatt ihnen zu folgen. Und es ist ein Leser, kein Editor: Es gibt keinen "Wert ändern und neu serialisieren" Modus. Um serialisierte Daten zu ändern, dekodieren Sie sie, nehmen Sie Ihre Änderung in PHP oder in JSON vor und serialisieren Sie auf der PHP-Seite neu. Wenn Sie die RAW-Zeichenfolge von Hand bearbeiten müssen, müssen Sie auch die Längenpräfixe korrigieren und - gemäß dem obigen Abschnitt - Bytes und nicht Zeichen zählen.

Häufig gestellte Fragen

Wofür wird PHP-Serialisierung verwendet?

Es konvertiert komplexe Werte wie Arrays und Objekte in eine einzelne Zeichenfolge, die in einer Datenbankspalte, einer Datei oder einem Cache leben kann und später neu erstellt wird. WordPress, WooCommerce, Laravel und Magento verwenden es alle stark für Einstellungen, Sitzungsdaten und zwischengespeicherte Werte.

Kann ich PHP-Daten ohne PHP-Server unterbinden?

Ja. der Werkzeug untergeordnet Parsen serialisierter PHP in Javascript in Ihrem Browser. Keine PHP-Installation, kein Server, kein Konto.

Ist es sicher, serialisierte Daten im Browser zu dekodieren?

Ja, und es ist sicherer als die eigene Php unserialize() Bei nicht vertrauenswürdiger Eingabe, da das Tool nur die Zeichenfolgenstruktur liest. Es werden niemals PHP-Objekte instanziiert, daher werden die Magic-Methoden angegriffen, die nativ werden unserialize() Gefährlich kann einfach nicht passieren.

Warum dekodiert meine serialisierte Zeichenfolge nicht?

Die üblichen Ursachen sind eine abgeschnittene Kopie (Sie haben die nachlaufenden Klammern oder das erste Zeichen verpasst), ein Präfix der Länge nach einem Suchen und Ersetzen oder Daten, die nicht tatsächlich PHP-serialisiert sind. Eine weitere, die Personen fängt: Wenn die Zeichenfolge Akzente, Emoji oder CJK-Text enthält, kann die Längenzählung des Tools-Codes falsch analysiert werden, da PHP die Zeichenfolgenlänge in Bytes und das Werkzeug zählt UTF-16-Einheiten.

Kann ich damit WordPress-WP_OPTIONS-Werte dekodieren?

Ja - das ist eine der häufigsten Anwendungen. Fragen Sie die option_value, fügen Sie es ein und lesen Sie die Struktur. Beachten Sie, dass Sie stattdessen WP-CLI auf dem Server benötigen, wenn die Option Multibyte-Text enthält.

Kann ich mit diesem Tool serialisierte Daten bearbeiten?

Nein, es ist ein Leser. Um einen Wert zu ändern, dekodieren Sie ihn, bearbeiten Sie PHP oder JSON und serialisieren Sie auf der Seite PHP neu. Das Hand-Editieren der RAW-Zeichenfolge bedeutet, die bytelangen Präfixe selbst zu fixieren, was fehleranfällig ist.

Was ist der Unterschied zwischen PHP-Serialisierung und JSON?

Die Serialisierung bewahrt PHP-spezifische Typen, einschließlich Objektklassennamen und private Eigenschaften. JSON ist sprachunabhängig und kennt nur Zeichenfolgen, Zahlen, Boolesche Werte, NULL, Arrays und Objekte. Neuer Code bevorzugt JSON, weil json_decode() Instanziiert Objekte nicht, so dass das Injektionsrisiko vermieden wird und JSON überall lesbar ist. Sie können eine dekodierte Struktur in die JSON-Formater damit zu arbeiten.

Behandelt das Tool serialisierte Objekte, nicht nur Arrays?

Ja. Objekte dekodieren mit ihrem neben den Eigenschaften erhaltenen Klassennamen und privaten oder geschützten Eigenschaften (die PHP mit Präfixen von Null-Byte serialisiert) auf lesbare Namen in der Ausgabe bereinigt.

Schluss

Wenn Sie WordPress, WooCommerce oder Laravel berühren und diese bei Bedarf lesen können, ist es unvermeidlich, PHP-Daten zu serialisieren. der Werkzeug untergeordnet Geht sicher auf einem Browser-Tab ohne PHP-Server – solange Sie wissen, dass es sich um eine echte Kante handelt: Multibyte-Strings können die Längenzählung auslösen und ASCII-Daten leuchten dort. Einfügen, lesen, reparieren. Und wenn die Daten voller Akzente oder Emoji sind, greifen Sie stattdessen nach WP-CLI.


Verwandte Werkzeuge:

Frequently Asked Questions

It converts complex values like arrays and objects into a single string that can live in a database column, a file, or a cache, and be rebuilt later. WordPress, WooCommerce, Laravel, and Magento all use it heavily for settings, session data, and cached values.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!