PHP
Webbadresser adresser~~POS=HEADCOMP
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¶meter2=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¶meter3%5Bsub2%5D=bar¶meter4=baz
som är den URL-kodade versionen av
parameter3[sub1]=foo¶meter3[sub2]=bar¶meter4=baz