Zoeken…
Een URL parseren
Gebruik parse_url()
om een URL in zijn afzonderlijke componenten te scheiden:
$url = 'http://www.example.com/page?foo=1&bar=baz#anchor';
$parts = parse_url($url);
Na het uitvoeren van het bovenstaande zou de inhoud van $parts
zijn:
Array
(
[scheme] => http
[host] => www.example.com
[path] => /page
[query] => foo=1&bar=baz
[fragment] => anchor
)
U kunt ook selectief slechts één component van de URL retourneren. Alleen de querystring retourneren:
$url = 'http://www.example.com/page?foo=1&bar=baz#anchor';
$queryString = parse_url($url, PHP_URL_QUERY);
Elk van de volgende constanten wordt geaccepteerd: PHP_URL_SCHEME
, PHP_URL_HOST
, PHP_URL_PORT
, PHP_URL_USER
, PHP_URL_PASS
, PHP_URL_PATH
, PHP_URL_QUERY
en PHP_URL_FRAGMENT
.
Gebruik parse_str()
om een queryreeks verder in sleutelwaardeparen te parseren:
$params = [];
parse_str($queryString, $params);
Na uitvoering van het bovenstaande zou de $params
array worden gevuld met het volgende:
Array
(
[foo] => 1
[bar] => baz
)
Omleiden naar een andere URL
U kunt de functie header()
om de browser de opdracht te geven om te verwijzen naar een andere 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');
}
U kunt ook omleiden naar een relatieve URL (dit is geen onderdeel van de officiële HTTP-specificatie, maar het werkt in alle browsers):
$url = 'foo/bar';
if (!headers_sent()) {
header('Location: ' . $url);
exit;
} else {
throw new Exception('Cannot redirect, headers already sent');
}
Als headers zijn verzonden, kunt u ook een HTML-tag met meta refresh
verzenden.
WAARSCHUWING: de meta-vernieuwingstag vertrouwt erop dat HTML correct wordt verwerkt door de client en sommigen zullen dit niet doen. Over het algemeen werkt het alleen in webbrowsers. Houd er ook rekening mee dat als headers zijn verzonden, er mogelijk een bug is en dit een uitzondering zou moeten veroorzaken.
U kunt ook een link afdrukken waarop gebruikers kunnen klikken, voor clients die de meta refresh-tag negeren:
$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;
Bouw een URL-gecodeerde queryreeks uit een array
De http_build_query()
maakt een querystring van een array of object. Deze tekenreeksen kunnen aan een URL worden toegevoegd om een GET-aanvraag te maken, of worden gebruikt in een POST-aanvraag met bijvoorbeeld cURL.
$parameters = array(
'parameter1' => 'foo',
'parameter2' => 'bar',
);
$queryString = http_build_query($parameters);
$queryString
heeft de volgende waarde:
parameter1=foo¶meter2=bar
http_build_query()
werkt ook met multidimensionale arrays:
$parameters = array(
"parameter3" => array(
"sub1" => "foo",
"sub2" => "bar",
),
"parameter4" => "baz",
);
$queryString = http_build_query($parameters);
$queryString
heeft deze waarde:
parameter3%5Bsub1%5D=foo¶meter3%5Bsub2%5D=bar¶meter4=baz
dat is de URL-gecodeerde versie van
parameter3[sub1]=foo¶meter3[sub2]=bar¶meter4=baz