Sök…


Analysera en URL

För att separera en URL i dess enskilda komponenter använder du parse_url() :

$url = 'http://www.example.com/page?foo=1&bar=baz#anchor';
$parts = parse_url($url);

Efter genomförandet av ovanstående skulle innehållet i $parts vara:

Array
(
    [scheme] => http
    [host] => www.example.com
    [path] => /page
    [query] => foo=1&bar=baz
    [fragment] => anchor
)

Du kan också selektivt returnera bara en del av webbadressen. För att returnera bara frågesträngen:

$url = 'http://www.example.com/page?foo=1&bar=baz#anchor';
$queryString = parse_url($url, PHP_URL_QUERY);

Någon av följande konstanter accepteras: PHP_URL_SCHEME , PHP_URL_HOST , PHP_URL_PORT , PHP_URL_USER , PHP_URL_PASS , PHP_URL_PATH , PHP_URL_QUERY och PHP_URL_FRAGMENT .

För att ytterligare analysera en frågesträng i nyckelvärdespar använder du parse_str() :

$params = [];
parse_str($queryString, $params);

Efter genomförandet av ovanstående skulle $params arrayen fyllas med följande:

Array
(
    [foo] => 1
    [bar] => baz
)

Omdirigerar till en annan URL

Du kan använda funktionen header() att instruera webbläsaren att omdirigera till en annan URL:

$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');
}

Du kan också omdirigera till en relativ URL (detta är inte en del av den officiella HTTP-specifikationen, men det fungerar i alla webbläsare):

$url = 'foo/bar';
if (!headers_sent()) {
  header('Location: ' . $url);
  exit;
} else {
  throw new Exception('Cannot redirect, headers already sent');
}

Om rubriker har skickats kan du alternativt skicka en meta refresh HTML-tagg.

VARNING: Metauppdateringskoden beror på att HTML behandlas korrekt av klienten, och vissa kommer inte att göra det. I allmänhet fungerar det bara i webbläsare. Tänk också på att om rubriker har skickats kan du ha ett fel och detta bör utlösa ett undantag.

Du kan också skriva ut en länk för användare att klicka på, för klienter som ignorerar metauppdateringstaggen:

$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;

Bygg en URL-kodad frågesträng från en matris

http_build_query() skapar en frågesträng från en matris eller ett objekt. Dessa strängar kan läggas till en URL för att skapa en GET-begäran eller användas i en POST-begäran med till exempel cURL.

$parameters = array(
    'parameter1' => 'foo',
    'parameter2' => 'bar',
);
$queryString = http_build_query($parameters);

$queryString har följande värde:

parameter1=foo&parameter2=bar

http_build_query() fungerar också med multidimensionella matriser:

$parameters = array(
    "parameter3" => array(
        "sub1" => "foo",
        "sub2" => "bar",
    ),
    "parameter4" => "baz",
);
$queryString = http_build_query($parameters);

$queryString har detta värde:

parameter3%5Bsub1%5D=foo&parameter3%5Bsub2%5D=bar&parameter4=baz

som är den URL-kodade versionen av

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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow