从url获取片段后的PHP问题。

时间:2011-05-11 22:53:15

标签: php javascript hash fragment

我有一些页面,它的网址就像http://www.domainname.com/m1.php?#m2.php?more=apple&starting=1

我希望获得价值$_GET['more']& $_GET['starting']

我使用此代码

<script type="text/javascript">
var parts = location.href.split('#');
if(parts.length > 1)
{
    var params = parts[0].split('?');
    var mark = '?';
    if(params.length > 1)
    {
        mark = '&';
    }
    location.href = parts[0] + mark + 'fragment=' + parts[1] ;
}
</script>
<?php
if(isset($_GET['fragment']))
{
    echo $_GET['fragment'];
}
?>

但我仍然获得了m2.php?more=apple并丢失了starting=1。如何获得2个?然后分成$_GET['more']&amp; $_GET['starting']?谢谢。

2 个答案:

答案 0 :(得分:1)

您的代码实际上并不接近获得这两个值。我不知道该怎么做,因为它距离很远。

如果您的PHP代码在设置新位置后运行,那么您需要在之前将值morestarting设为 hash(#)因为哈希部分没有被发送到服务器。

如果您想在JavaScript中获取morestarting值,那么它可以是其中之一,但您需要知道自己处于哪个阶段才能以正确的方式获得它。

实施例

网址: http://www.domainname.com/m2.php?more=apple&starting=1

查询字符串:more=apple&starting=1
哈希:

<?php
echo $_GET['more']; // apple
echo $_GET['starting']; // 1

网址: http://www.domainname.com/m1.php?#m2.php?more=apple&starting=1

查询字符串: none
哈希:m2.php?more=apple&starting=1

<?php
echo count($_GET) // 0

使用Javascript:

var hash = location.hash; // m2.php?more=apple&starting=1
var hashparts = hash.split("?");
var urlhashpart = hashparts[0]; // m2.php
var querystringhashpart = hashparts[1]; // more=apple&starting=1
var params = querystringhashpart.split("&");
for (var i in params) {
    var param = params[i].split("=");
    document.write(param[0] + ": " + param[1]); // outputs 'more: apple', 'starting: 1'
}

答案 1 :(得分:0)

或者,如果您希望获取此信息以便在PHP中使用,parse_url()parse_str()的简单组合也可以解决问题:

$url = parse_url('http://www.domainname.com/m1.php?#m2.php?more=apple&starting=1');
$anchorparts = explode('?',$url['fragment']);
parse_str($anchorparts[1],$vars);

转储$vars然后产生:

array(2) {
  ["more"]=>
  string(5) "apple"
  ["starting"]=>
  string(1) "1"
}