获取整个 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】:此示例显示带有 port
或 https
的完整 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,包括查询字符串和锚点的主要内容,如果未能解决你的问题,请参考以下文章