W3docs

parse_str()

Artikel über die PHP-Funktion parse_str(), die einen Query-String in Variablen umwandelt – nützlich für URLs und Formulare.

Die PHP-Funktion parse_str() parst einen URL-Query-String (den Teil nach dem ? in einer URL, z. B. name=John&age=35) und wandelt jedes key=value-Paar in einen Eintrag in einem Array um. Sie ist das Gegenstück zu http_build_query(): Eine Funktion erstellt einen Query-String, die andere zerlegt ihn.

Diese Seite behandelt die Syntax der Funktion, ein einfaches Beispiel, den Umgang mit Arrays und verschachtelten Schlüsseln, URL-Dekodierungsregeln sowie einen wichtigen Sicherheitshinweis zum zweiten Argument.

Syntax

parse_str(string $string, array &$result): void

parse_str() nimmt zwei Parameter entgegen:

  • $string — der zu parsende Query-String, zum Beispiel name=John&age=35.
  • &$result — eine Variable, die per Referenz übergeben wird und die die Funktion mit den geparsten Schlüssel/Wert-Paaren füllt. Sie wird bei jedem Aufruf mit einem neuen Array überschrieben.

Die Funktion gibt nichts zurück (void); die geparsten Daten werden in $result geschrieben.

Hinweis: In älteren PHP-Versionen war das Argument $result optional, und das Weglassen importierte jedes Paar direkt in lokale Variablen. Dieses Verhalten wurde in PHP 7.2 als veraltet markiert und in PHP 8.0 entfernt$result ist jetzt erforderlich. Immer angeben.

Einfaches Beispiel

php— editable, runs on the server

Hier enthält $query einen Query-String. parse_str() teilt ihn an &, dekodiert jeden Wert und speichert das Ergebnis in $output. Die Ausgabe lautet:

Array
(
    [name] => John Doe
    [age] => 35
    [gender] => male
)

Beachten Sie, dass John+Doe zu John Doe wurde: parse_str() wendet dieselbe URL-Dekodierung wie urldecode() an, d. h. ein + wird zu einem Leerzeichen und %XX-Escape-Sequenzen werden aufgelöst.

Arrays und verschachtelte Schlüssel parsen

Query-Strings verwenden oft [], um Arrays auszudrücken – genau wie HTML-Formularfelder namens colors[] oder user[name]. parse_str() versteht diese Klammernotation und erstellt automatisch verschachtelte Arrays:

<?php
$query = 'colors[]=red&colors[]=blue&user[name]=Sam&user[age]=20';
parse_str($query, $output);
print_r($output);
?>

Ausgabe:

Array
(
    [colors] => Array
        (
            [0] => red
            [1] => blue
        )

    [user] => Array
        (
            [name] => Sam
            [age] => 20
        )

)

Dies ist das gleiche Parsing, das PHP auf $_GET und $_POST anwendet, weshalb ein Formularfeld namens user[name] als $_POST['user']['name'] ankommt.

Den Query-String aus einer URL auslesen

Ein häufiges Muster ist, den Query-String mit parse_url() aus einer vollständigen URL zu extrahieren und ihn dann an parse_str() zu übergeben:

<?php
$url = 'https://example.com/search?term=php&page=2';
parse_str(parse_url($url, PHP_URL_QUERY), $params);
print_r($params);
?>

Ausgabe:

Array
(
    [term] => php
    [page] => 2
)

Für den Query-String der aktuellen Anfrage benötigt man parse_str() in der Regel gar nicht — PHP hat $_GET bereits befüllt. Verwenden Sie parse_str(), wenn der Query-String von woanders kommt: einer gespeicherten URL, einer API-Antwort oder einem Webhook-Payload.

Sicherheitshinweis

Wenn das zweite Argument das Ergebnis-Array ist (wie oben gezeigt), ist parse_str() sicher und vorhersehbar. Die Gefahr bestand nur bei der inzwischen entfernten Ein-Argument-Form, die Variablen direkt in den lokalen Gültigkeitsbereich injizierte — nicht vertrauenswürdige Eingaben konnten vorhandene Variablen überschreiben (eine Variante des alten register_globals-Problems). Da PHP 8.0 diese Form entfernt hat, ist dieses Problem in modernem Code verschwunden. Dennoch sollten Sie jeden Wert, der aus einem Query-String stammt, als nicht vertrauenswürdige Benutzereingabe behandeln und vor der Verwendung validieren.

Verwandte Funktionen

  • explode() — einen String an einem Trennzeichen aufteilen, wenn eine flache Liste statt key=value-Parsing benötigt wird.
  • implode() — Array-Elemente wieder zu einem String zusammenfügen.
  • str_getcsv() — CSV-formatierte Strings in Arrays parsen.
  • PHP-Formularverarbeitung — wie $_GET und $_POST dasselbe Parsing verwenden.

Übung

Übung
Was macht die Funktion 'parse_str()' in PHP?
Was macht die Funktion 'parse_str()' in PHP?
Was this page helpful?