Подтвердить что ты не робот

Получить весь URL, включая строку запроса и привязку

Есть ли способ получить весь URL-адрес, используемый для запроса текущей страницы, включая якорь (текст после # - я могу использовать неправильное слово), в включенных страницах?

то есть. Страница foo.php включена в bar.php. Если я использую ваше решение в foo.php, мне нужно, чтобы он сказал bar.php? Blarg = a # blahblahblah

4b9b3361

Ответ 1

Нет, я боюсь, что нет, так как хэш (строка, включая #) никогда не передается серверу, это исключительно поведенческое свойство браузера. Однако переменная $_SERVER['REQUEST_URI'] будет содержать остальные.

Если вам действительно нужно знать, что такое хеш, вам нужно будет использовать свойство JavaScript document.location.hash, которое содержит содержимое хеша (вы можете вставить его в форму или отправить на сервер с помощью ajax-запрос).

Ответ 2

// find out the domain:
$domain = $_SERVER['HTTP_HOST'];
// find out the path to the current file:
$path = $_SERVER['SCRIPT_NAME'];
// find out the QueryString:
$queryString = $_SERVER['QUERY_STRING'];
// put it all together:
$url = "http://" . $domain . $path . "?" . $queryString;
echo $url;

// An alternative way is to use REQUEST_URI instead of both
// SCRIPT_NAME and QUERY_STRING, if you don't need them seperate:
$url = "http://" . $domain . $_SERVER['REQUEST_URI'];
echo $url;

Ответ 3

Вы можете передать полный URL-адрес, включая якорь (часть после #), используя функцию загрузки Javascript, которая отправляет этот URL-адрес конечной точке Ajax.

Ответ 4

Вы не можете - вам нужно будет записать значение хэша в cookie через Javascript, чтобы отправить его на сервер по следующему запросу.

Ответ 5

В этом примере показан полный URL-запрос с port или https

function curPageURL() {
            $pageURL = 'http';
            if(isset($_SERVER["HTTPS"]))
            if ($_SERVER["HTTPS"] == "on") {
                $pageURL .= "s";
            }
            $pageURL .= "://";
            if ($_SERVER["SERVER_PORT"] != "80") {
                $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
            } else {
                $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
            }
            return $pageURL;
        }

использование: echo curPageURL();

Ответ 6

Верно, что вы не можете передавать хэш-данные на сервер. но иногда то, что вам нужно, это получить URL-адрес с "#blablabla" с сервера, например, когда вы передаете ссылку кому-то с "#", но на этом сайте нужно войти в систему. ниже - это еще один способ подумать, возможно, не меняться подробно.

Во-первых, иногда вы хотите поделиться своей ссылкой с '#', например:

www.so.com#lala

Во-первых, вы можете изменить свой JavaScript-код и передать некоторые данные с помощью?? и '#' в то же время, например:

www.so.com?foo=lala&&flag=hash#lala

тогда как '#' nerver переходит на сервер, но вы можете получить данные из $_GET [''], например:

if($_GET['flag'] === 'hash'){

  // base url
  $_SESSION['url'] = strtok('http://'.$_SERVER['HTTP_HOST'].$_SERVER["REQUEST_URI"],"?"); 

  // hash data
  $_SESSION['hash'] = $_GET['foo'];
}

тогда вы можете сделать все с помощью данных "#", если вы хотите передать его клиенту, вы можете:

$url = $_SESSION['url']."#".$_SESSION['hash'];
header("Location:".$url);

Наконец, URL возвращается

Ответ 7

Вы можете передать якорь с помощью функции rawurlencode.

В основном вам просто нужно сделать что-то вроде этого:

bar.php?blarg=a<?php echo rawurlencode('#blahblahblah')?>