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

Posted

技术标签:

【中文标题】获取整个 URL,包括查询字符串和锚点【英文标题】:Get entire URL, including query string and anchor 【发布时间】:2010-11-01 08:16:58 【问题描述】:

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

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

【问题讨论】:

见***.com/questions/940905/… 【参考方案1】:

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

如果你真的需要知道哈希是什么,你必须使用 document.location.hash javascript 属性,它包含哈希的内容(然后你可以将它插入到一个表单中,或者将它发送到服务器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】:

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

【讨论】:

您能否详细说明一下或提供一些有关这样做的参考信息?【参考方案4】:

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

【讨论】:

【参考方案5】:

此示例显示带有 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();

【讨论】:

这并没有回答问题的关键。返回 # 之后的 url 部分【参考方案6】:

确实不能将哈希数据传递给服务器。但有时您想要的是从服务器获取一些带有“#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);

网址终于回来了

【讨论】:

【参考方案7】:

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

基本上你只需要这样做:

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

【讨论】:

我认为您误解了这个问题。他想从 url 中读取命名的锚点,而不是对输出进行编码。

以上是关于获取整个 URL,包括查询字符串和锚点的主要内容,如果未能解决你的问题,请参考以下文章

Swift 约束和锚点

让AJAX和锚点标签一样简单

框架和锚点

LAYABOX轴心点和锚点

React Router 浏览器历史推送和锚点

通用控制 - 关于码头和锚点的简单问题