Ricerca…
Analisi di un URL
Per separare un URL nei suoi singoli componenti, usa parse_url()
:
$url = 'http://www.example.com/page?foo=1&bar=baz#anchor';
$parts = parse_url($url);
Dopo aver eseguito quanto sopra, il contenuto di $parts
sarebbe:
Array
(
[scheme] => http
[host] => www.example.com
[path] => /page
[query] => foo=1&bar=baz
[fragment] => anchor
)
Puoi anche restituire in modo selettivo solo un componente dell'URL. Per restituire solo la querystring:
$url = 'http://www.example.com/page?foo=1&bar=baz#anchor';
$queryString = parse_url($url, PHP_URL_QUERY);
Sono accettate le seguenti costanti: PHP_URL_SCHEME
, PHP_URL_HOST
, PHP_URL_PORT
, PHP_URL_USER
, PHP_URL_PASS
, PHP_URL_PATH
, PHP_URL_QUERY
e PHP_URL_FRAGMENT
.
Per analizzare ulteriormente una stringa di query in coppie di valori chiave utilizzare parse_str()
:
$params = [];
parse_str($queryString, $params);
Dopo l'esecuzione di quanto sopra, l'array $params
verrà popolato con quanto segue:
Array
(
[foo] => 1
[bar] => baz
)
Reindirizzamento a un altro URL
Puoi utilizzare la funzione header()
per indicare al browser di reindirizzare a un URL diverso:
$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');
}
Puoi anche reindirizzare a un URL relativo (questo non fa parte delle specifiche HTTP ufficiali, ma funziona in tutti i browser):
$url = 'foo/bar';
if (!headers_sent()) {
header('Location: ' . $url);
exit;
} else {
throw new Exception('Cannot redirect, headers already sent');
}
Se le intestazioni sono state inviate, puoi in alternativa inviare un meta refresh
tag HTML di meta refresh
.
ATTENZIONE: il tag meta refresh si basa su un codice HTML elaborato correttamente dal client e alcuni non lo fanno. In generale, funziona solo nei browser web. Inoltre, considera che se le intestazioni sono state inviate, potresti avere un bug e questo dovrebbe innescare un'eccezione.
Puoi anche stampare un link per fare clic sugli utenti, per i clienti che ignorano il tag 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;
Crea una stringa di query con codifica URL da una matrice
La http_build_query()
creerà una stringa di query da una matrice o da un oggetto. Queste stringhe possono essere aggiunte a un URL per creare una richiesta GET o utilizzate in una richiesta POST con, ad esempio, cURL.
$parameters = array(
'parameter1' => 'foo',
'parameter2' => 'bar',
);
$queryString = http_build_query($parameters);
$queryString
avrà il seguente valore:
parameter1=foo¶meter2=bar
http_build_query()
funzionerà anche con array multidimensionali:
$parameters = array(
"parameter3" => array(
"sub1" => "foo",
"sub2" => "bar",
),
"parameter4" => "baz",
);
$queryString = http_build_query($parameters);
$queryString
avrà questo valore:
parameter3%5Bsub1%5D=foo¶meter3%5Bsub2%5D=bar¶meter4=baz
che è la versione con codifica URL di
parameter3[sub1]=foo¶meter3[sub2]=bar¶meter4=baz