Recherche…
Analyse d'une URL
Pour séparer une URL dans ses composants individuels, utilisez parse_url()
:
$url = 'http://www.example.com/page?foo=1&bar=baz#anchor';
$parts = parse_url($url);
Après avoir exécuté ce qui précède, le contenu de $parts
serait:
Array
(
[scheme] => http
[host] => www.example.com
[path] => /page
[query] => foo=1&bar=baz
[fragment] => anchor
)
Vous pouvez également renvoyer de manière sélective un seul composant de l'URL. Pour ne renvoyer que la chaîne de requête:
$url = 'http://www.example.com/page?foo=1&bar=baz#anchor';
$queryString = parse_url($url, PHP_URL_QUERY);
Les constantes suivantes sont acceptées: PHP_URL_SCHEME
, PHP_URL_HOST
, PHP_URL_PORT
, PHP_URL_USER
, PHP_URL_PASS
, PHP_URL_PATH
, PHP_URL_QUERY
et PHP_URL_FRAGMENT
.
Pour analyser davantage une chaîne de requête en paires de valeurs clés, utilisez parse_str()
:
$params = [];
parse_str($queryString, $params);
Après l'exécution de ce qui précède, le tableau $params
sera rempli avec les éléments suivants:
Array
(
[foo] => 1
[bar] => baz
)
Redirection vers une autre URL
Vous pouvez utiliser la fonction header()
pour demander au navigateur de rediriger vers une URL différente:
$url = 'https://example.org/foo/bar';
if (!headers_sent()) { // check headers - you can not send headers if they already sent
header('Location: ' . $url);
exit; // protects from code being executed after redirect request
} else {
throw new Exception('Cannot redirect, headers already sent');
}
Vous pouvez également rediriger vers une URL relative (cela ne fait pas partie de la spécification HTTP officielle, mais elle fonctionne dans tous les navigateurs):
$url = 'foo/bar';
if (!headers_sent()) {
header('Location: ' . $url);
exit;
} else {
throw new Exception('Cannot redirect, headers already sent');
}
Si des en-têtes ont été envoyés, vous pouvez également envoyer une balise HTML de meta refresh
.
AVERTISSEMENT: la balise meta refresh repose sur le traitement correct du HTML par le client, et certains ne le feront pas. En général, cela ne fonctionne que dans les navigateurs Web. Aussi, considérez que si des en-têtes ont été envoyés, vous pourriez avoir un bogue et cela devrait déclencher une exception.
Vous pouvez également imprimer un lien sur lequel les utilisateurs doivent cliquer, pour les clients qui ignorent la balise meta refresh:
$url = 'https://example.org/foo/bar';
if (!headers_sent()) {
header('Location: ' . $url);
} else {
$saveUrl = htmlspecialchars($url); // protects from browser seeing url as HTML
// tells browser to redirect page to $saveUrl after 0 seconds
print '<meta http-equiv="refresh" content="0; url=' . $saveUrl . '">';
// shows link for user
print '<p>Please continue to <a href="' . $saveUrl . '">' . $saveUrl . '</a></p>';
}
exit;
Construire une chaîne de requête encodée en URL à partir d'un tableau
http_build_query()
créera une chaîne de requête à partir d'un tableau ou d'un objet. Ces chaînes peuvent être ajoutées à une URL pour créer une requête GET ou utilisées dans une requête POST avec, par exemple, cURL.
$parameters = array(
'parameter1' => 'foo',
'parameter2' => 'bar',
);
$queryString = http_build_query($parameters);
$queryString
aura la valeur suivante:
parameter1=foo¶meter2=bar
http_build_query()
fonctionnera également avec les tableaux multidimensionnels:
$parameters = array(
"parameter3" => array(
"sub1" => "foo",
"sub2" => "bar",
),
"parameter4" => "baz",
);
$queryString = http_build_query($parameters);
$queryString
aura cette valeur:
parameter3%5Bsub1%5D=foo¶meter3%5Bsub2%5D=bar¶meter4=baz
qui est la version encodée en URL de
parameter3[sub1]=foo¶meter3[sub2]=bar¶meter4=baz