获取整个URL,包括查询字符串和锚点

时间:2009-06-09 00:23:32

标签: php

有没有办法在包含的页面中获取用于请求当前页面的整个URL,包括锚点(#后面的文字 - 我可能使用了错误的单词)?

即。 page foo.php包含在bar.php中。如果我在foo.php中使用你的解决方案,我需要它说bar.php?blarg = a#blahblahblah

7 个答案:

答案 0 :(得分:80)

不,我不敢,因为哈希(字符串包括#)永远不会传递给服务器,它只是浏览器的行为属性。但$_SERVER['REQUEST_URI']变量将包含其余变量。

如果你真的需要知道哈希是什么,你将不得不使用document.location.hash JavaScript属性,其中包含哈希的内容(然后你可以将它插入表单中,或者将其发送给带有ajax请求的服务器)。

答案 1 :(得分:11)

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

答案 2 :(得分:5)

您可以使用Javascript onload函数传递完整的URL,包括锚点(#之后的部分),该函数将该URL发送到Ajax端点。

答案 3 :(得分:3)

你不能 - 你必须通过Javascript将哈希的值写入cookie,以便在后续请求中将其发送到服务器。

答案 4 :(得分:2)

此示例显示了porthttps

的完整网址请求
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();

答案 5 :(得分:0)

确实无法将哈希数据传递给服务器。但有时你想要的是从服务器获取一些带有'#blablabla'的网址,就像你与'#'的人分享链接一样,但网站需要登录。下面是另一种思考方式,也许不是很详细。

首先,有时您想与'#'分享您的链接,例如:

www.so.com#lala

首先,您可以更改您的网址使用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);

最后,网址又回来了

答案 6 :(得分:-5)

您可以使用rawurlencode funcion传递锚点。

基本上你只需要做这样的事情:

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