当请求PHP站点时,例如somesite.php?a=some text # some more
目前似乎$_REQUEST["a"]
返回字符串“some text”,我怎样才能获得“更多文本#”。还有其他字符可以通过PHP获得类似的处理吗?
答案 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)
#字符及其后面的任何字符都指定并锚定。 这是浏览器将滚动到的页面中的一个点。
据我所知,这仅供浏览器使用,并且永远不会传输到服务器端 - 大概是因为它对服务器没有任何意义,