Получить весь URL, включая строку запроса и привязку
Есть ли способ получить весь URL-адрес, используемый для запроса текущей страницы, включая якорь (текст после # - я могу использовать неправильное слово), в включенных страницах?
то есть. Страница foo.php включена в bar.php. Если я использую ваше решение в foo.php, мне нужно, чтобы он сказал bar.php? Blarg = a # blahblahblah
Ответы
Ответ 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')?>