Получить весь URL, включая строку запроса и привязку - PullRequest
44 голосов
/ 09 июня 2009

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

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

Ответы [ 7 ]

80 голосов
/ 09 июня 2009

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

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

11 голосов
/ 11 декабря 2014
// 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;
5 голосов
/ 09 июня 2009

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

3 голосов
/ 09 июня 2009

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

2 голосов
/ 29 марта 2014

В этом примере показывается полный запрос 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();

0 голосов
/ 10 марта 2017

Это правда, что вы не можете передать хеш-данные на сервер. но иногда вам нужно получить URL-адрес с «#blablabla» с сервера, например, когда вы делитесь ссылкой с кем-то с «#», но сайт должен войти. ниже представлен другой способ мышления, может быть, он не отличается подробным описанием.

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

www.so.com#lala

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

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

затем, когда '#' переходит на сервер, но вы можете получить данные из $ _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 вернулся

0 голосов
/ 13 августа 2012

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

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

bar.php?blarg=a<?php echo rawurlencode('#blahblahblah')?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...