Проблема с PHP после получения фрагмента из URL. - PullRequest
0 голосов
/ 12 мая 2011

У меня есть какая-то страница, ее 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']?Благодарю.

Ответы [ 2 ]

1 голос
/ 12 мая 2011

Ваш код даже близко не подходит для получения этих двух значений. Я не уверен, что с этим делать, потому что это так далеко.

Если ваш PHP-код работает после установки нового местоположения, тогда вам нужно, чтобы значения more и starting были до хэша (#) так как часть хеша не отправляется на сервер.

Если вы хотите получить значения more и starting в JavaScript, то это может быть любое место, но вам нужно знать, на какой стадии вы находитесь, чтобы получить его правильно.

Примеры * * 1016 URL: http://www.domainname.com/m2.php?more=apple&starting=1 Строка запроса: more=apple&starting=1
Хеш: нет <?php echo $_GET['more']; // apple echo $_GET['starting']; // 1 URL: http://www.domainname.com/m1.php?#m2.php?more=apple&starting=1 Строка запроса: нет
Хеш: 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' }

0 голосов
/ 12 мая 2011

В качестве альтернативы, если вы хотите получить эту информацию для использования в 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"
}
...