PHP: Comment parser une URL

Comment obtenir les éléments d'une URL, et les paramètres éventuellement associés?

Deux cas peuvent se présenter: soit l'URL est dans une chaîne de caractère et on veut en retrouver les éléments, soit il s'agit d'un script Web lancé pour traiter les données d'une formulaire par la méthode POST, dont on veut récupérer les données.

1) Utilisation de la fonction parse_url

Pour parser une URL dans une chaîne, deux fonctions seront utiles, parse_url et parse_str. La première décompose une URL en éléments comme Location en JavaScript, la seconde décompose une chaîne de paramètres en variable et valeurs.

Comparaison avec JavaScript

La fonction parse_url à pour équivalent l'objet Location en JavaScript. Les clés du tableau associatif sont remplacées par les propriétés de l'objet Location.

L'URL complète s'obtient avec la constante __FILE__ qui est globale et n'appartient pas au tableau généré par parse_url.

Données
PHP
JavaScript
URL complète
__FILE__
location.href
Protocole (http)
scheme
protocol
Domaine
host
hostname
Répertoire et fichier
path
pathname
Ancre dans la page
fragment
hash
Paramètres
query
search
Port
-
port
Login
user
-
Mot de passe
pass
-
Tableau d'équivalence PHP - JavaScript

Autres différences:

Utilisation de la fonction parse_url

Exemple:

$url = "http://www.scriptol.fr/comment/parser-url.php#content";
$arr = parse_url($url)
print_r($arr);

On obtient un tableau associatif où les clés sont détaillées dans le tableau précédent.

array(
"scheme" => http,
"host" => www.scriptol.fr,
"path" => /comment/parser-url.php,
"fragment" => content
)

Utilisation de la fonction parse_str

Exemple:

$parameters = $arr["query"];

parse_str($parameters, $data);
print_r($data);

$data est un tableau associatif, ou les clés sont les variables passées en paramètres, et les valeurs, le contenu de ces variables.

Par exemple:

fichier.php?nom=untel&numero=50

Le tableau généré sera:

array(
"nom" => untel,
"numero" => 50
)

Sources et téléchargement

2) Utilisation de la variable $_SERVER

Cette seconde partie montre comment obtenir les mêmes informations avec la variable prédéfinie $_SERVER et notamment obtenir les données d'un formulaire à passer à un script PHP.

Comparaison avec parse_url

Les données concernant le script ou la page PHP sont obtenues avec la variable prédéfinie $_SERVER et une liste de clés correspondant aux informations cherchées, qui sont données dans le tableau ci-dessous.

Précisons que le nom de domaine est donné directement par l'utilisateur. Dans notre example, c'est www.example.com.

Données
parse_url
Clés pour $_SERVER
URL complète
__FILE__
domaine + REQUEST_URI
Protocole
scheme
SERVER_PROTOCOL
Domaine
host
constante utilisateur
Répertoire et fichier
path
SCRIPT_NAME
Ancre dans la page
fragment
-
Paramètres
query
QUERY_STRING
Port
-
-
Login
user
Traité séparément
Mot de passe
pass
Traité séparément
Tableau d'équivalence entre parse_url et $_SERVER

Différences:

Utilisation de la variable prédéfinie

Exemple:

$protocol = $_SERVER[SERVER_PROTOCOL];

La liste des clés est fournie dans la manuel PHP à la rubrique: "variables prédéfinies".

Récupérer les données d'un formulaire HTML

Exemple:

$parameters = $_SERVER[QUERY_STRING];

parse_str($parameters, $data);
print_r($data);

$data est un tableau associatif, ou les clés sont les variables passées en paramètres, et les valeurs, le contenu de ces variables.

Voir la première partie de l'article pour plus de détails.

Sources et téléchargement