获取整个URL,包括查询string和锚点

有没有一种方法可以在包含的页面中获取用于请求当前页面的整个URL,包括锚点(#之后的文本 – 我可能会使用错误的词)?

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

不,恐怕不行,因为散列( 包括 #的string)永远不会传递给服务器,它完全是浏览器的行为属性。 然而, $_SERVER['REQUEST_URI']variables将包含其余部分。

如果你真的需要知道什么是散列,你将不得不使用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; 

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

你不能 – 你必须通过Javascript把这个哈希值写到一个cookie中,然后把它发送到服务器上。

此示例显示了带有porthttps的完整URL请求

 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();

确实,你不能把哈希数据传递给服务器。 但有时候你想要的是从服务器上获取一些带#blablabla的URL,就像当你用“#”分享某个人的链接,但是该网站需要login。 下面是另一种思考方式,也许不会有细微差别。

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

 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又回来了

你可以使用rawurlencode函数来传递锚点。

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

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