【问题标题】:PHP issue after getting fragment from url.从 url 获取片段后的 PHP 问题。
【发布时间】:2011-05-11 22:53:15
【问题描述】:

我有一些页面,它的 url 类似于 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'] & $_GET['starting']?谢谢。

【问题讨论】:

    标签: php javascript hash fragment


    【解决方案1】:

    您的代码实际上还没有接近获得这两个值。我不知道该怎么做,因为它太远了。

    如果您的 PHP 代码在 设置新位置后运行,那么您将希望值 morestarting之前 散列 (@987654323 @) 因为哈希部分不会发送到服务器。

    如果你想在 JavaScript 中获取 morestarting 值,那么它可以是任何一个地方,但你需要知道你处于什么阶段才能以正确的方式获取它。

    示例

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

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

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

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

    查询字符串:
    哈希:m2.php?more=apple&amp;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'
    }
    

    【讨论】:

    • 我添加了您的最后一个Javascript,但没有弹出警报。
    【解决方案2】:

    或者,如果您希望获取此信息以在 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"
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-04
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多