Start · Sprachen · PHP · Referenz · parse_str

parse_str

Funktion

Verarbeitet einen URL-Abfrage-String (Query-String) und speichert die darin enthaltenen Schlüssel-Wert-Paare in einem Array.

seit PHP 4.0.0 Kategorie: string

Signatur

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

Beschreibung

parse_str() zerlegt einen URL-kodierten Abfrage-String (wie er etwa nach dem ? in einer URL vorkommt) in seine einzelnen Schlüssel-Wert-Paare und schreibt das Ergebnis in das übergebene Array $result. Die Funktion versteht dabei sowohl einfache Schlüssel (name=Max) als auch Array-Notation (farbe[]=rot&farbe[]=blau).

Typische Anwendungsfälle sind das manuelle Zerlegen von Query-Strings aus URLs, das Verarbeiten von POST-Körpern im Format application/x-www-form-urlencoded oder das Parsen von gespeicherten Such-/Filterparametern.

Seit PHP 7.2 ist die Verwendung ohne den zweiten Parameter ($result) nicht mehr erlaubt und erzeugt einen Fehler, da das frühere Verhalten (Erstellen von Variablen im lokalen Scope) als unsicher gilt und seit PHP 8.0 vollständig entfernt wurde. Der zweite Parameter ist daher zwingend anzugeben.

Zu beachten ist, dass Punkte (.) und Leerzeichen in Schlüsselnamen automatisch in Unterstriche (_) umgewandelt werden, da PHP-Variablennamen keine Punkte enthalten dürfen.

Parameter

Name Typ Default Beschreibung
$string Pflicht string Der zu verarbeitende URL-kodierte Abfrage-String, z. B. name=Max&alter=30.
$result Pflicht array Die Variable, in die die geparsten Schlüssel-Wert-Paare als assoziatives Array geschrieben werden. Wird als Referenz übergeben.

Rückgabewert

Typ
void
Beschreibung
Die Funktion gibt keinen Wert zurück. Das Ergebnis wird direkt in den per Referenz übergebenen Parameter $result geschrieben.

Beispiele

Einfachen Query-String parsen

<?php
$queryString = 'name=Max+Mustermann&alter=30&stadt=Berlin';
parse_str($queryString, $params);

echo $params['name'];  // Max Mustermann
echo $params['alter']; // 30
echo $params['stadt']; // Berlin

print_r($params);
Max Mustermann3030Berlin Array ( [name] => Max Mustermann [alter] => 30 [stadt] => Berlin )

Array-Notation und URL-Kodierung verarbeiten

<?php
$queryString = 'farbe[]=rot&farbe[]=blau&farbe[]=gr%C3%BCn&filter%5Bpreis%5D=100';
parse_str($queryString, $params);

print_r($params['farbe']);
echo $params['filter']['preis']; // 100
Array ( [0] => rot [1] => blau [2] => grün ) 100

Query-String aus einer URL extrahieren und parsen

<?php
$url = 'https://example.com/suche?q=PHP+Kurs&seite=2&sortierung=preis';
$parts = parse_url($url);
parse_str($parts['query'], $params);

echo $params['q'];          // PHP Kurs
echo $params['seite'];      // 2
echo $params['sortierung']; // preis
PHP Kurs 2 preis

// Wichtig · Fallstricke

Sicherheitshinweis: Vertrauen Sie niemals blind den geparsten Werten aus Benutzereingaben. Validieren und filtern Sie alle Werte aus $result, bevor Sie sie weiterverwenden – insbesondere vor SQL-Abfragen oder der Ausgabe in HTML (XSS-Schutz).

Schlüssel-Umbenennung: Punkte und Leerzeichen in Schlüsselnamen werden automatisch durch Unterstriche ersetzt. So wird mein.key=1 zu $result['mein_key']. Dies kann zu unerwartetem Verhalten führen, wenn gezielt auf solche Schlüssel zugegriffen wird.

Veraltetes Verhalten: In PHP-Versionen vor 7.2 konnte parse_str() ohne zweiten Parameter aufgerufen werden und erstelle dann Variablen direkt im lokalen Scope – ein erhebliches Sicherheitsrisiko. Dieses Verhalten wurde in PHP 7.2 als deprecated markiert und in PHP 8.0 vollständig entfernt.