我有一些页面,它的网址就像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']
?谢谢。
答案 0 :(得分:1)
您的代码实际上并不接近获得这两个值。我不知道该怎么做,因为它距离很远。
如果您的PHP代码在设置新位置后运行,那么您需要在之前将值more
和starting
设为 hash(#
)因为哈希部分没有被发送到服务器。
如果您想在JavaScript中获取more
和starting
值,那么它可以是其中之一,但您需要知道自己处于哪个阶段才能以正确的方式获得它。
网址: 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"
}