обрезать URL (строка запроса) - PullRequest
1 голос
/ 03 февраля 2010

У меня есть строка запроса, подобная приведенной ниже:

http://localhost/project/viewMember.php?sort=Y2xhc3M=&class=Mw==&page=9

Теперь переменная: страница в строке запроса может находиться в любом месте строки запроса либо в начале, либо в середине, либо в конце (как? Page = 9 или & page = 9 & или & page = 9).

Теперь мне нужно удалить page = 9 из строки запроса и получить действительную строку запроса.

Ответы [ 5 ]

9 голосов
/ 03 февраля 2010

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


Используйте parse_url , чтобы получить строку запроса из URL (или написать собственную функцию).

Используйте parse_str для преобразования строки запроса в массив

unset ключ, который вам не нужен

Используйте http_build_query , чтобы собрать массив в строку запроса

Затем восстановить URL (если требуется)

2 голосов
/ 03 февраля 2010

Попробуйте:

preg_replace('/page=\d+/', '', $url);
0 голосов
/ 09 февраля 2010

Я создал эти две функции:

function cleanQuery($queryLabels){
    // Filter all items in $_GET which are not in $queryLabels
    if(!is_array($queryLabels)) return;
    foreach($_GET as $queryLabel => $queryValue)
        if(!in_array($queryLabel, $queryLabels) || ($queryValue == ''))
            unset($_GET[$queryLabel]);
    ksort($_GET);
}
function amendQuery($queryItems = array()){
    $queryItems = array_merge($_GET, $queryItems);
    ksort($queryItems);
    return http_build_query($queryItems);
}

Для удаления части страницы я бы использовал

$_GET = amendQuery(array('page'=>null));

cleanQuery делает обратное. Передайте массив терминов, которые вы хотите сохранить.

0 голосов
/ 04 февраля 2010
function remove_part_of_qs($removeMe) 
{
    $qs = array();

    foreach($_GET as $key => $value) 
    {
        if($key != $removeMe)
        {
            $qs[$key] =  $value;
        }
    }

    return "?" . http_build_query($qs);
}

echo remove_part_of_qs("page");

Это должно быть сделано, это мой первый пост в StackOverflow, так что давай!

0 голосов
/ 03 февраля 2010

Попробовал написать функцию для этого. Кажется, работает:

<?php

$url = "http://localhost/project/viewMember.php?sort=Y2xhc3M=&class=Mw==&page=9";
// prints http://localhost/project/viewMember.php?sort=Y2xhc3M=&class=Mw==
print changeURL($url) . "\n"; 

$url = "http://localhost/project/viewMember.php?sort=Y2xhc3M=&page=9&class=Mw==";
// prints http://localhost/project/viewMember.php?sort=Y2xhc3M=&class=Mw==
print changeURL($url) . "\n";

function changeURL($url)
{
    $arr = parse_url($url);

    $query = $arr['query'];

    $pieces = explode('&',$query);

    for($i=0;$i<count($pieces);$i++)
    {
            if(preg_match('/^page=\d+/',$pieces[$i]))
                 unset($pieces[$i]);
    }    

    $query = implode('&',$pieces);

    return "$arr[scheme]://$arr[host]$arr[user]$arr[pass]$arr[path]?$query$arr[fragment]";   
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...