假设URL为:

www.example.com/?val=1#part2

PHP可以使用GET数组读取请求变量val1。

哈希值part2也是可读的吗?或者这仅仅取决于浏览器和JavaScript?


当前回答

答案是否定的。

散列的主要目的是滚动到已定义书签的页面的某个部分。当页面加载时,滚动到此部分。

浏览将滚动,使该行成为页面中第一个可见内容,这取决于该行以下有多少内容。

是的,javascript可以访问它,然后一个简单的ajax调用就可以做到这一点

其他回答

主要的问题是浏览器甚至不会发送带有片段部分的请求。片段部分在浏览器中被解析。它可以通过JavaScript访问。

无论如何,您可以使用parse_url()将URL解析为位,包括片段部分,但这显然不是您的情况。

另一个解决方案是在php页面中添加一个隐藏的输入字段:

<input type="hidden" id="myHiddenLocationHash" name="myHiddenLocationHash" value="">

使用javascript/jQuery,你可以在页面加载或响应事件时设置该字段的值:

$('#myHiddenLocationHash').val(document.location.hash.replace('#',''));

在php的服务器端,你可以使用$_POST集合读取这个值:

$server_location_hash = $_POST['myHiddenLocationHash'];

我认为哈希值只在客户端使用,所以在php中无法获得。

你可以用javascript重定向到PHP。

简单的测试,访问http://localhost:8000/hello?foo=bar#this-is-not-sent-to-server

python -c "import SimpleHTTPServer;SimpleHTTPServer.test()"
Serving HTTP on 0.0.0.0 port 8000 ...
localhost - - [02/Jun/2009 12:48:47] code 404, message File not found
localhost - - [02/Jun/2009 12:48:47] "GET /hello?foo=bar HTTP/1.1" 404 -

服务器接收请求时不带#附件——散列标签后的任何内容都只是客户端上的锚查找。

你可以通过javascript找到URL中使用的锚名,例如:

<script>alert(window.location.hash);</script>

PHP中的parse_url()函数可以工作,如果您已经有了所需的URL字符串,包括片段(http://codepad.org/BDqjtXix):)

<?
echo parse_url("http://foo?bar#fizzbuzz",PHP_URL_FRAGMENT);
?>

Output: fizzbuzz

但我认为PHP不会接收片段信息,因为它是客户机专用的。

是什么:

动态抓取#散列

<script>
var urlhash = window.location.hash, //get the hash from url
    txthash = urlhash.replace("#", ""); //remove the #
    //alert(txthash);
</script>

<?php
$hash = "<script>document.writeln(txthash);</script>";
echo $hash;
?>

为了使它更流利:

使用Javascript和PHP的完整示例

<script>
var urlhash = window.location.hash,  //get the hash from url
txthash = urlhash.replace("#", "");  //remove the #

function changehash(a,b){
   window.location.hash = b; //add hash to url
   //alert(b); //alert to test
   location.reload(); //reload page to show the current hash
}
</script>

<?php $hash = "<script>document.writeln(txthash);</script>";?>

<a onclick="changehash(this,'#hash1')" style="text-decoration: underline;cursor: pointer;" >Change to #hash1</a><br/>
<a onclick="changehash(this,'#hash2')" style="text-decoration: underline;cursor: pointer;">Change to #hash2</a><br/> 

<?php echo "This is the current hash: " . $hash; ?>