Поиск…


Анализ URL-адреса

Чтобы разделить URL-адрес на отдельные компоненты, используйте parse_url() :

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

После выполнения вышеизложенного содержимое $parts будет:

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

Вы также можете выборочно возвращать только один компонент URL. Чтобы вернуть только запрос:

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

Любая из следующих констант принимается: PHP_URL_SCHEME , PHP_URL_HOST , PHP_URL_PORT , PHP_URL_USER , PHP_URL_PASS , PHP_URL_PATH , PHP_URL_QUERY и PHP_URL_FRAGMENT .

Для дальнейшего анализа строки запроса в парах значений значения используйте parse_str() :

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

После выполнения вышеизложенного массив $params будет заполнен следующим:

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

Перенаправление на другой URL-адрес

Вы можете использовать функцию header() чтобы указать браузеру перенаправить на другой 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');
}

Вы также можете перенаправить на относительный URL (это не является частью официальной спецификации HTTP, но она работает во всех браузерах):

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

Если отправлены заголовки, вы также можете отправить meta refresh HTML-тег meta refresh .

ПРЕДУПРЕЖДЕНИЕ . Тег meta refresh основан на правильной обработке HTML клиентом, и некоторые из них этого не сделают. В общем, он работает только в веб-браузерах. Также подумайте, что если отправлены заголовки, у вас может быть ошибка, и это должно вызвать исключение.

Вы также можете распечатать ссылку для кликов для клиентов, которые игнорируют тег мета обновления:

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

Создайте строку запроса в кодировке URL из массива

http_build_query() создаст строку запроса из массива или объекта. Эти строки могут быть добавлены к URL-адресу для создания запроса GET или использоваться в POST-запросе, например, cURL.

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

$queryString будет иметь следующее значение:

parameter1=foo&parameter2=bar

http_build_query() также будет работать с многомерными массивами:

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

$queryString будет иметь это значение:

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

которая является кодированной URL-версией

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


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow