请求字符串中的#字符

时间:2009-08-20 07:00:01

标签: php

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

目前似乎$_REQUEST["a"]返回字符串“some text”,我怎样才能获得“更多文本#”。还有其他字符可以通过PHP获得类似的处理吗?

7 个答案:

答案 0 :(得分:8)

哈希(#)是一个“Fragment identifier”(也非正式地称为“锚点”),指的是页面中的位置 - 而你“好吧,它不会被发送到服务器。

这是唯一表现得像这样的网址。

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

答案 1 :(得分:4)

somesite.php?a=<?=urlencode( "some text # some more" )?>

将其变成:

somesite.php?a=some+text+%23+some+more

答案 2 :(得分:1)

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

答案 3 :(得分:1)

你做不到。浏览器不会将#后面的url部分发送到服务器。

因此,删除URL的那部分并不是PHP,它永远不会看到它。

答案 4 :(得分:1)

你可以使用urlencode()&amp; urldecode()函数 它将是%23而不是#symbol

答案 5 :(得分:1)

如果你必须拥有它,你可以写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>

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

答案 6 :(得分:0)

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

据我所知,这仅供浏览器使用,并且永远不会传输到服务器端 - 大概是因为它对服务器没有任何意义,