PHP
Adresy URL
Szukaj…
Analiza adresu URL
Aby oddzielić adres URL na poszczególne składniki, użyj parse_url()
:
$url = 'http://www.example.com/page?foo=1&bar=baz#anchor';
$parts = parse_url($url);
Po wykonaniu powyższego zawartość części $parts
będzie wyglądać następująco:
Array
(
[scheme] => http
[host] => www.example.com
[path] => /page
[query] => foo=1&bar=baz
[fragment] => anchor
)
Możesz także selektywnie zwrócić tylko jeden element adresu URL. Aby zwrócić tylko kwerendę:
$url = 'http://www.example.com/page?foo=1&bar=baz#anchor';
$queryString = parse_url($url, PHP_URL_QUERY);
Akceptowane są dowolne z następujących stałych: PHP_URL_SCHEME
, PHP_URL_HOST
, PHP_URL_PORT
, PHP_URL_USER
, PHP_URL_PASS
, PHP_URL_PATH
, PHP_URL_QUERY
i PHP_URL_FRAGMENT
.
Aby dalej przeanalizować ciąg zapytania w pary klucz-wartość, użyj parse_str()
:
$params = [];
parse_str($queryString, $params);
Po wykonaniu powyższego tablica $params
zostanie wypełniona następującymi elementami:
Array
(
[foo] => 1
[bar] => baz
)
Przekierowanie do innego adresu URL
Możesz użyć funkcji header()
aby poinstruować przeglądarkę o przekierowaniu na inny adres 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');
}
Możesz również przekierować na względny adres URL (nie jest to część oficjalnej specyfikacji HTTP, ale działa we wszystkich przeglądarkach):
$url = 'foo/bar';
if (!headers_sent()) {
header('Location: ' . $url);
exit;
} else {
throw new Exception('Cannot redirect, headers already sent');
}
Jeśli nagłówki zostały wysłane, możesz alternatywnie wysłać meta refresh
tag HTML.
OSTRZEŻENIE: Metatag odświeżania zależy od poprawnego przetworzenia HTML przez klienta, a niektóre tego nie zrobią. Ogólnie rzecz biorąc, działa tylko w przeglądarkach internetowych. Weź również pod uwagę, że jeśli nagłówki zostały wysłane, możesz mieć błąd, który powinien wywołać wyjątek.
Możesz również wydrukować link do kliknięcia przez użytkowników, w przypadku klientów, którzy ignorują meta tag odświeżania:
$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;
Zbuduj ciąg zapytania zakodowany w adresie URL z tablicy
Funkcja http_build_query()
utworzy ciąg zapytania z tablicy lub obiektu. Te ciągi mogą być dołączane do adresu URL w celu utworzenia żądania GET lub używane w żądaniu POST z, na przykład, cURL.
$parameters = array(
'parameter1' => 'foo',
'parameter2' => 'bar',
);
$queryString = http_build_query($parameters);
$queryString
będzie mieć następującą wartość:
parameter1=foo¶meter2=bar
http_build_query()
będzie również działać z tablicami wielowymiarowymi:
$parameters = array(
"parameter3" => array(
"sub1" => "foo",
"sub2" => "bar",
),
"parameter4" => "baz",
);
$queryString = http_build_query($parameters);
$queryString
będzie mieć tę wartość:
parameter3%5Bsub1%5D=foo¶meter3%5Bsub2%5D=bar¶meter4=baz
która jest wersją zakodowaną w adresie URL
parameter3[sub1]=foo¶meter3[sub2]=bar¶meter4=baz