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

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

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

【问题讨论】:

标签: php


【解决方案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 中读取命名的锚点,而不是对输出进行编码。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-07-29
          • 1970-01-01
          • 2016-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多