trim url(查询字符串)

时间:2010-02-03 13:20:24

标签: php

我有一个类似下面给出的查询字符串:

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

现在变量:查询字符串中的页面可以是查询字符串中的任何位置,可以是开头,中间或结尾(例如?page = 9或& page = 9&或& page = 9)。

现在,我需要从查询字符串中删除page = 9并获取有效的查询字符串。

5 个答案:

答案 0 :(得分:9)

可以做很多方法,包括正则表达式(如下所示)。这是我能想到的最强大的方法,尽管它比其他方法更复杂。


使用parse_url从url获取查询字符串(或编写自己的函数)。

使用parse_str将查询字符串转换为数组

unset你不想要的钥匙

使用http_build_query将数组重组为查询字符串

然后重建Url(如果需要)

答案 1 :(得分:2)

尝试:

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

答案 2 :(得分: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]";   
}
?>

答案 3 :(得分: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上的第一篇文章,所以就这么简单!

答案 4 :(得分: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正好相反。传递一系列您想要保留的术语。