Start · Sprachen · PHP · Referenz · mb_parse_str

mb_parse_str

Funktion

Parst einen Query-String im URL-Format und speichert die dekodierten Schlüssel-Wert-Paare unter Berücksichtigung der Multibyte-Zeichenkodierung in <code>$result</code>.

seit PHP 4.0.6 Kategorie: string

Signatur

mb_parse_str(string $string, array &$result): bool

Beschreibung

mb_parse_str() funktioniert ähnlich wie die eingebaute Funktion parse_str(), berücksichtigt jedoch die aktuelle interne Zeichenkodierung der mbstring-Erweiterung. Sie zerlegt einen Query-String der Form key=value&key2=value2 und schreibt die Ergebnisse als assoziatives Array in den übergebenen $result-Parameter.

Besonders nützlich ist die Funktion, wenn Formulardaten oder URL-Parameter Multibyte-Zeichen enthalten (z. B. japanische, chinesische oder arabische Schriftzeichen), da die Kodierung der Schlüssel und Werte korrekt entsprechend der mit mb_internal_encoding() gesetzten Kodierung behandelt wird.

Im Gegensatz zur älteren Verhaltensweise von parse_str() ohne zweiten Parameter werden bei mb_parse_str() die Ergebnisse stets in das übergebene Array $result geschrieben. Das Setzen von Variablen im globalen Scope ist seit PHP 7.2 als veraltet markiert und wurde in neueren Versionen entfernt.

Die Funktion gibt true bei Erfolg zurück, false bei einem Fehler — etwa wenn kein gültiger Ergebnis-Parameter übergeben wird.

Parameter

Name Typ Default Beschreibung
$string Pflicht string Der zu parsende Query-String im URL-Format, z. B. name=Max&stadt=K%C3%B6ln.
$result Pflicht array Referenz auf ein Array, in das die geparsten Schlüssel-Wert-Paare geschrieben werden. Das Array wird vor dem Befüllen nicht geleert.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn der Query-String erfolgreich geparst wurde, andernfalls false.

Beispiele

Einfacher Query-String mit ASCII-Zeichen parsen

<?php
mb_internal_encoding('UTF-8');

$queryString = 'vorname=Hans&nachname=M%C3%BCller&alter=42';
$result = [];

mb_parse_str($queryString, $result);

print_r($result);
Array ( [vorname] => Hans [nachname] => Müller [alter] => 42 )

Multibyte-Zeichen (japanisch) im Query-String parsen

<?php
mb_internal_encoding('UTF-8');

// Query-String mit URL-kodierten japanischen Zeichen
$queryString = 'name=%E5%B1%B1%E7%94%B0&city=%E6%9D%B1%E4%BA%AC';
$result = [];

mb_parse_str($queryString, $result);

echo '名前: ' . $result['name'] . PHP_EOL;
echo '都市: ' . $result['city'] . PHP_EOL;
名前: 山田 都市: 東京

Array-Parameter im Query-String parsen

<?php
mb_internal_encoding('UTF-8');

$queryString = 'farben[]=rot&farben[]=gr%C3%BCn&farben[]=blau&aktiv=1';
$result = [];

mb_parse_str($queryString, $result);

var_dump($result['aktiv']);
print_r($result['farben']);
string(1) "1" Array ( [0] => rot [1] => grün [2] => blau )

// Wichtig · Fallstricke

Sicherheitshinweis: Die aus dem Query-String geparsten Werte sind nicht automatisch sicher für die Ausgabe in HTML oder die Verwendung in SQL-Abfragen. Alle Werte müssen vor der Verwendung entsprechend gefiltert oder escaped werden — z. B. mit htmlspecialchars() für HTML-Ausgaben oder mit vorbereiteten Statements für Datenbankabfragen.

Veraltetes Verhalten: In älteren PHP-Versionen konnte mb_parse_str() auch ohne den $result-Parameter aufgerufen werden, wobei Variablen direkt im aktuellen Geltungsbereich gesetzt wurden. Dieses Verhalten wurde in PHP 8.0 entfernt. Der $result-Parameter ist daher seit PHP 8.0 verpflichtend.

Kodierung: Die interne Kodierung sollte mit mb_internal_encoding() korrekt gesetzt sein, bevor mb_parse_str() aufgerufen wird. Andernfalls kann es zu fehlerhafter Dekodierung von Multibyte-Zeichen kommen.