2012-02-27 64 views
4
逃生(window.location.href)的

我已经尝试了这么多的组合让我的页面的正确路径类似的JavaScript代码等效在PHP

escape(window.location.href) 

我已经试过这样:

$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]$_SERVER[QUERY_STRING]"; 

但它返回是这样的:当实际页面

http://www.mydomain.com/node/4158?asdf=1asdf=1 

http://www.mydomain.com/node/4158?asdf=1 

,如果我有这样的URL:http://www.mydomain.com/node/4158#comments例如其结果是:

http://www.mydomain.com/node/4158 

即没有 “#comments”

+4

'#'部分不会传输到服务器。这是浏览器用来跳转到特定锚点的“哈希碎片”。 – 2012-02-27 09:49:23

+0

不要使用'escape',它已被破坏并被弃用。使用'encodeURIComponent'。 – Quentin 2012-02-27 09:49:46

+0

即使我使用encodeURIComponent,我仍然将#comments作为已保存url的一部分。 – jaypabs 2012-02-27 10:04:33

回答

3

片段标识符#是完全处理客户端。浏览器不会将它发送到服务器,所以PHP无法访问它。

找到它的唯一方法是在发出HTTP请求的页面中包含JavaScript,其中包括完整的URI。

+0

这对我来说是一个大问题,因为在我使用此代码之后“escape(window .location.href)“它将值保存到表格中,我使用php来区分当前页面上的url和表格上的保存网址。如果这不能在PHP中完成,有没有一种方法可以保存只使用JavaScript W/O #comments或?asdf = 1的URL? – jaypabs 2012-02-27 09:58:08

0

尝试

$url = $_SERVER['REQUEST_URI']; 
+0

这不会给'#'片段 – 2012-02-27 09:49:37

+0

,因为我已经在我的问题中解释过它不包含?asdf = 1或#comments – jaypabs 2012-02-27 09:58:52

0

$_SERVER['QUERY_STRING']$_SERVER['REQUEST_URI']的子串 - 你只需要后者。但是不要自己构建URL,只需使用$_SERVER['SCRIPT_URI']即可。另外,由于您的应用程序是服务器端,并且片段标识符(从#开始的所有内容)都不会包含在HTTP请求中,所以无法在php代码中访问它。

0
$location = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://"; 
if ($_SERVER["SERVER_PORT"] != "80") { 
    $location .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"]; 
} else { 
    $location .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]; 
} 
echo $location; 
0

的人说,这个片段客户端在这里很多,但根据文档parse_url将返回片段如果存在(见链接的第一个例子)。

+0

只要在这个上搜索帮助,并注意到这没有帮助,因为'parse_url'必须首先有一个字符串来抓取url。那么,这个字符串从哪里来?不是来自'parse_url'!所以,当你有一个带'#'的字符串时,它确实有效。但是你需要首先获取字符串和AFAIK,但是你不能在PHP中使用#作为字符串来获取整个URL,尽管这样做会很好! – 2013-02-15 23:22:01