相当于PHP中的转义(window.location.href)


Equivalent of escape(window.location.href) in PHP

我已经尝试了很多组合来获得正确的页面路径,比如javascript代码

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"

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

了解它是什么的唯一方法是在发出包含完整URI的HTTP请求的页面中包含JavaScript。

$_SERVER['QUERY_STRING']$_SERVER['REQUEST_URI']的子字符串-您只需要后者。但是,与其自己构建URL,不如简单地使用$_SERVER['SCRIPT_URI']

此外,由于您的应用程序是服务器端的,并且片段标识符(#中的所有内容)不会包含在HTTP请求中,因此无法在php代码中访问它。

$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;

尝试

$url = $_SERVER['REQUEST_URI'];

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