【发布时间】:2010-11-01 08:16:58
【问题描述】:
有没有办法在包含的页面中获取用于请求当前页面的整个 URL,包括锚点(# 之后的文本 - 我可能使用了错误的词)?
即页面 foo.php 包含在 bar.php 中。如果我在 foo.php 中使用您的解决方案,我需要它说 bar.php?blarg=a#example。
【问题讨论】:
标签: php
有没有办法在包含的页面中获取用于请求当前页面的整个 URL,包括锚点(# 之后的文本 - 我可能使用了错误的词)?
即页面 foo.php 包含在 bar.php 中。如果我在 foo.php 中使用您的解决方案,我需要它说 bar.php?blarg=a#example。
【问题讨论】:
标签: php
不,恐怕不会,因为哈希(字符串包括 #)永远不会传递给服务器,它只是浏览器的行为属性。但是,$_SERVER['REQUEST_URI'] 变量将包含其余部分。
如果你真的需要知道哈希是什么,你必须使用 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 将哈希值写入 cookie,以便在后续请求中将其发送到服务器。
【讨论】:
您可以使用将 URL 发送到 Ajax 端点的 Javascript onload 函数传递完整的 URL,包括锚点(# 之后的部分)。
【讨论】:
此示例显示带有 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();
【讨论】:
确实不能将哈希数据传递给服务器。但有时您想要的是从服务器获取一些带有“#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);
网址终于回来了
【讨论】:
您可以使用 rawurlencode 函数传递锚点。
基本上你只需要这样做:
bar.php?blarg=a<?php echo rawurlencode('#blahblahblah')?>
【讨论】: