(PHP 4, PHP 5, PHP 7, PHP 8)
parse_url — Analyse une URL et retourne ses composants
Description
parse_url(string
$url, int
$component = -1): int|string|array|null|false
Cette fonction n'est pas
faite pour valider l'URL fournie, elle ne fait que la découper en parties listées
ci-dessous. Les URL partielles et invalides sont également acceptées, la fonction
parse_url() fera de son mieux pour les analyser correctement.
Liste de paramètres
-
url
-
L'URL à analyser.
-
component
-
Peut être une des constantes parmi PHP_URL_SCHEME,
PHP_URL_HOST, PHP_URL_PORT,
PHP_URL_USER, PHP_URL_PASS,
PHP_URL_PATH, PHP_URL_QUERY
ou PHP_URL_FRAGMENT pour récupérer uniquement
une partie de l'URL en tant que chaîne de caractères (sauf lorsque
PHP_URL_PORT est fourni ; dans ce cas, la valeur retournée
sera un entier).
Valeurs de retour
Pour les URL vraiment mal formées, parse_url() peut retourner
false.
Si le paramètre component est omis, un array
associatif est retourné. Au moins un élément sera présent dans le tableau. Voici
les clés potentielles de ce tableau:
-
scheme - e.g. http
-
host
-
port
-
user
-
pass
-
path
-
query - après le point d'interrogation "
?"
-
fragment - après le croisillon (dièse) "
#"
Si le paramètre component est spécifié, parse_url()
retourne une string (ou un entier dans le cas d'utilisation de la
constante PHP_URL_PORT)au lieu d'un array. Si le composant
demandé n'existe pas dans l'URL, null sera retourné.
À partir de PHP 8.0.0, parse_url() distingue entre les
fragments et requêtes absentes et vides :
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 = ""
Précédemment tout les cas résultaient en la requête et le fragment étant null.
À noter que les caractères de contrôle (cf. ctype_cntrl())
dans les composants sont remplacés par un tiret du bas
(_).
Historique
Exemples
Exemple #1 Exemple avec parse_url()
<?php
$url = 'http://username:password@hostname:9090/path?arg=value#anchor';
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));
?>
L'exemple ci-dessus va afficher :
array(8) {
["scheme"]=>
string(4) "http"
["host"]=>
string(8) "hostname"
["port"]=>
int(9090)
["user"]=>
string(8) "username"
["pass"]=>
string(8) "password"
["path"]=>
string(5) "/path"
["query"]=>
string(9) "arg=value"
["fragment"]=>
string(6) "anchor"
}
string(4) "http"
string(8) "username"
string(8) "password"
string(8) "hostname"
int(9090)
string(5) "/path"
string(9) "arg=value"
string(6) "anchor"
Exemple #2 Exemple avec la fonction parse_url() sans schéma
<?php
$url = '//www.example.com/path?googleguy=googley';
// Avant PHP 5.4.7, le chemin sera "//www.example.com/path"
var_dump(parse_url($url));
?>
L'exemple ci-dessus va afficher :
array(3) {
["host"]=>
string(15) "www.example.com"
["path"]=>
string(5) "/path"
["query"]=>
string(17) "googleguy=googley"
}
Notes
Attention
Cette fonction peut ne pas donner des résultats corrects pour les URLs
relatives ou invalides et les résultats peuvent ne pas correspondre au
comportement standard des clients HTTP.
Si des URLs venant d'entré utilisateur doivent être analysé,
des vérifications supplémentaires sont requises, par exemple en utilisant
filter_var() avec le filtre
FILTER_VALIDATE_URL.
Note:
parse_url() a été créée tout spécialement pour analyser les URL
et non les URI. Cependant, pour des raisons de compatibilité adjacente, PHP
fait une exception pour le schéma file:// où les triples slashs
(file:///...) sont autorisés. Tous les autres schémas sont invalides.
Voir aussi
- pathinfo() - Retourne des informations sur un chemin système
- parse_str() - Analyse une chaîne de caractères d'une variable
- http_build_query() - Génère une chaîne de requête en encodage URL
- dirname() - Renvoie le chemin du dossier parent
- basename() - Retourne le nom de la composante finale d'un chemin
- » RFC 3986