Есть ли способ получить весь URL-адрес, используемый для запроса текущей страницы, включая привязку (текст после # – я могу использовать неправильное слово), в включенных страницах?
т.е. страница foo.php включена в bar.php. Если я использую ваше решение в foo.php, мне нужно, чтобы он сказал bar.php? Blarg = a # blahblahblah
Нет, я боюсь, что нет, поскольку хэш (строка, включая #) никогда не передается серверу, это исключительно поведенческое свойство браузера. Однако переменная $_SERVER['REQUEST_URI']
будет содержать остальные.
Если вам действительно нужно знать, что такое хэш, вам нужно будет использовать свойство document.location.hash
JavaScript, которое содержит содержимое хеша (вы можете вставить его в форму или отправить на сервер с помощью ajax-запрос).
// 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;
Вы можете передать полный URL-адрес, включая якорь (часть после #), используя функцию загрузки Javascript, которая отправляет этот URL-адрес конечной точке Ajax.
Вы не можете – вам нужно будет записать значение хэша в cookie через Javascript, чтобы отправить его на сервер с последующим запросом.
Этот пример показывает полный URL-запрос show с 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();
Верно, что вы не можете передавать хэш-данные на сервер. но иногда то, что вам нужно, это получить URL-адрес с «#blablabla» с сервера, например, когда вы передаете ссылку кому-то с «#», но на этом сайте нужно войти в систему. ниже – это еще один способ подумать, возможно, не меняться подробным образом.
Во-первых, иногда вы хотите поделиться своей ссылкой с «#», например:
www.so.com#lala
Во-первых, вы можете изменить свой javascript для использования url и передать некоторые данные с помощью?? и '#' в то же время, например:
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-адрес вернулся
Вы можете передать якорь, используя функцию rawurlencode.
В основном вам просто нужно сделать что-то вроде этого:
bar.php?blarg=a<?php echo rawurlencode('#blahblahblah')?>