parse_url
(PHP 4, PHP 5, PHP 7, PHP 8)
parse_url — Analysiert eine URL und gibt ihre Bestandteile zurück
Beschreibung
$url, int $component = -1): int|string|array|null|falseDiese Funktion parst eine URL und gibt ein assoziatives Array zurück, das die in der URL vorhandenen Komponenten enthält. Die Werte der Array-Elemente sind nicht URL-dekodiert.
Diese Funktion ist nicht dazu gedacht, eine gegebene URL zu validieren, sondern es gliedert eine URL in die unten aufgeführten Bestandteile. Unvollständige und ungültige URLs werden als Parameter akzeptiert; parse_url() versucht, sie so gut wie möglich korrekt zu analysieren.
Parameter-Liste
-
url -
Die zu analysierende URL.
-
component -
Geben Sie einen der folgenden Parameter an, um nur einen spezifischen Teil der URL als String (außer wenn
PHP_URL_PORTangegeben wird, in diesem Fall ist der Rückgabewert ein int) zu erhalten:PHP_URL_SCHEME,PHP_URL_HOST,PHP_URL_PORT,PHP_URL_USER,PHP_URL_PASS,PHP_URL_PATH,PHP_URL_QUERYoderPHP_URL_FRAGMENT.
Rückgabewerte
Bei sehr fehlerhaften URLs kann parse_url() false
zurückgeben.
Wird der Parameter component ausgelassen, wird ein
assoziatives Array zurückgegeben. Mindestens ein Bestandteil
liegt im Array vor. Mögliche Schlüssel in diesem Array sind:
- scheme - z. B. http
- host
- port
- user
- pass
- path
-
query - alles nach dem Fragezeichen
? -
fragment - alles nach dem Text-Anker
#
Ist der Parameter component angegeben, gibt
parse_url() einen String (oder ein
int bei PHP_URL_PORT) anstelle eines
Arrays zurück. Wenn die angeforderte Komponente in der
angegebenen URL nicht existiert, wird null zurückgegeben. Seit PHP 8.0.0
unterscheidet parse_url() zwischen fehlenden und leeren
Abfragen und Fragmenten:
http://example.com/foo → query = null, fragment = null http://example.com/foo? → query = "", fragment = null http://example.com/foo# → query = null, fragment = "" http://example.com/foo?# → query = "", fragment = ""
Zuvor führten alle Fälle dazu, dass Abfrage und Fragment null waren.
Zu beachten ist, dass Steuerzeichen (vgl. ctype_cntrl())
in den Komponenten durch Unterstriche (_) ersetzt werden.
Changelog
| Version | Beschreibung |
|---|---|
| 8.0.0 | parse_url() unterscheidet nun zwischen fehlenden und leeren Abfragen und Fragmenten. |
Beispiele
Beispiel #1 Ein parse_url()-Beispiel
<?php
$url = 'http://benutzername:passwort@hostname:9090/pfad?argument=wert#textanker';
var_dump(parse_url($url));
var_dump(parse_url($url, PHP_URL_SCHEME));
var_dump(parse_url($url, PHP_URL_USER));
var_dump(parse_url($url, PHP_URL_PASS));
var_dump(parse_url($url, PHP_URL_HOST));
var_dump(parse_url($url, PHP_URL_PORT));
var_dump(parse_url($url, PHP_URL_PATH));
var_dump(parse_url($url, PHP_URL_QUERY));
var_dump(parse_url($url, PHP_URL_FRAGMENT));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
array(8) {
["scheme"]=>
string(4) "http"
["host"]=>
string(8) "hostname"
["port"]=>
int(9090)
["user"]=>
string(12) "benutzername"
["pass"]=>
string(8) "passwort"
["path"]=>
string(5) "/pfad"
["query"]=>
string(13) "argument=wert"
["fragment"]=>
string(9) "textanker"
}
string(4) "http"
string(12) "benutzername"
string(8) "passwort"
string(8) "hostname"
int(9090)
string(5) "/pfad"
string(13) "argument=wert"
string(9) "textanker"
Beispiel #2 Ein parse_url()-Beispiel mit fehlendem Schema
<?php
$url = '//www.example.com/path?googleguy=googley';
// Vor 5.4.7 wurde der Pfad als "//www.example.com/path" angezeigt
var_dump(parse_url($url));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
array(3) {
["host"]=>
string(15) "www.example.com"
["path"]=>
string(5) "/path"
["query"]=>
string(17) "googleguy=googley"
}
Anmerkungen
Diese Funktion gibt bei relativen oder ungültigen URLs möglicherweise
inkorrekte Ergebnisse zurück und die Ergebnisse entsprechen möglicherweise
nicht einmal dem üblichen Verhalten von HTTP-Clients. Wenn URLs von nicht
vertrauenswürdigen Eingaben ausgewertet werden müssen, ist eine
zusätzliche Überprüfung erforderlich, z. B. durch Verwendung von
filter_var() mit dem Filter
FILTER_VALIDATE_URL.
Hinweis:
Die Funktion ist primär dazu gedacht, URLs zu analysieren, nicht jedoch URIs. Um jedoch die Abwärtskompatibilität von PHP zu gewährleisten, wird für das Schema file:// die Ausnahme dreier Slashes (file:///) zugelassen. Bei allen anderen Schemata ist diese Notierung ungültig.
Siehe auch
- pathinfo() - Liefert Informationen über einen Dateipfad
- parse_str() - Überträgt einen String in Variablen
- http_build_query() - Liefert einen URL-kodierten Query-String
- dirname() - Liefert den Pfad des übergeordneten Verzeichnisses
- basename() - Liefert den letzten Namensteil einer Pfadangabe
- » RFC 3986

