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_PORT
angegeben 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_QUERY
oderPHP_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