2010-02-03 5 views
1

У меня есть строка запроса, как один ниже:Обрезать URL (строка запроса)

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

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

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

ответ

0

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

<?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]"; 
} 
?> 
+0

, но страница = 9 не фиксирована. –

+0

Как насчет сейчас? – codaddict

9

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


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

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

unset ключ, который вы не хотите

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

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

2

Try:

preg_replace('/page=\d+/', '', $url); 
+0

Примечание: это также будет соответствовать, например, ? nextpage = 5 – Piskvor

+0

, если моя строка запроса похожа на 'sort = Y2xhc3M = & class = Mw == & page = 2', это выведет' sort = Y2xhc3M = & class = Mw == & '. Можете вы plz дать regex удаление & от начала и конца. –

0
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

любая помощь высоко оценена –

0

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

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 делает противоположное. Перейдите в массив терминов, которые вы хотите сохранить.