代码之家  ›  专栏  ›  技术社区  ›  Mustafa Temiz

#请求字符串中的字符

php
  •  1
  • Mustafa Temiz  · 技术社区  · 15 年前

    当一个PHP站点被请求时,例如 somesite.php?a=some text # some more

    目前看来 $_REQUEST["a"] 返回字符串“some text”,如何获取“some text some more”。是否有其他字符可以通过php得到类似的处理?

    7 回复  |  直到 7 年前
        1
  •  1
  •   RichieHindle    15 年前

    在URL规范中,“”字符是特殊的;它指的是页面上的一个位置(由“a”标记命名,如: <a name='top'>this is the top of the page</a> )它及其之后的所有内容都不会传递给服务器(PHP)。

        2
  •  8
  •   RichieHindle    15 年前

    哈希(哈希) # 是一个“ Fragment identifier (也称为“锚”),指一个地点 在内部 页面-你是对的,它不会被发送到服务器。

    它是唯一一个这样的URL字符。

    如果需要在URL中包含哈希字符,则需要将其编码为 %23

        3
  •  4
  •   Mark L    15 年前
    somesite.php?a=<?=urlencode( "some text # some more" )?>
    

    把它变成:

    somesite.php?a=some+text+%23+some+more
    
        4
  •  1
  •   Guffa    15 年前

    不能。浏览器不会将URL的一部分发送到服务器。

    所以,不是PHP删除了URL的那部分,它从来没有看到过。

        5
  •  1
  •   x2. alexey    15 年前

    可以使用urlencode()函数 它将是%23而不是符号

        6
  •  1
  •   Steve Brewer    15 年前

    如果您必须拥有它,您可以编写JavaScript来重新发布它:

    <script>
    
    function checkHash(){
      var hash = window.location.hash;
      if(hash){
        // see if we've already included this
        var loc = window.location.pathname;
        if(!loc.indexOf('hashData=') >= 0){
          // hashData param not included
          window.location.href = loc + '&hashData=' + encodeURIComponent(hash) + hash;
        }
      }
    };
    checkHash();
    </script>
    

    这有一些明显的问题(比如它双重提交项目)。注意-如果有人单击页面中的哈希链接,代码将不会重新运行,因此您需要监视哈希的更改。你可能关心,也可能不关心。

        7
  •  0
  •   belugabob    15 年前

    字符及其后面的任何字符指定并锚定。 这是浏览器将滚动到的页面中的一个点。

    据我所知,这只供浏览器使用,从未传输到服务器端——大概是因为它对服务器没有任何意义,