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&parameter2=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&parameter3%5Bsub2%5D=bar&parameter4=baz

che è la versione con codifica URL di

parameter3[sub1]=foo&parameter3[sub2]=bar&parameter4=baz


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow