从URL中删除特定参数,同时保留其他参数

时间:2012-06-11 18:18:18

标签: php regex

我想从网址中删除参数:

$linkExample1='https://stackoverflow.com/?name=alaa&counter=1';
$linkExample2='https://stackoverflow.com/?counter=4&star=5';

我想得到这个结果:

我正在尝试使用preg_replace,但我不知道如何做到这一点。

8 个答案:

答案 0 :(得分:7)

$link = preg_replace('~(\?|&)counter=[^&]*~','$1',$link);

答案 1 :(得分:3)

依靠正则表达式有时会搞砸......

您应该使用parse_url()函数来分解整个URL并将其作为关联数组呈现给您。

拥有该数组后,您可以根据需要进行编辑并删除参数。

完成后,使用http_build_url()功能重建URL并进行更改。

查看此处的文档..

Parse_Url Http_build_query()

修改

哎呀,忘了提。获得参数字符串后,您显然需要将参数分开作为单独的参数。为此,您可以提供字符串作为parse_str()函数的输入。

您甚至可以使用explode()和&作为完成这项工作的分界线。

答案 2 :(得分:1)

我建议使用parse_url()http_build_query()的组合。

答案 3 :(得分:1)

一个代码示例我如何获取请求的URL并删除名为" name"的参数,然后重新加载页面:

$url = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; //complete url
$parts = parse_url($url);
parse_str($parts['query'], $query); //grab the query part
unset($query['name']); //remove a parameter from query
$dest_query = http_build_query($query); //rebuild new query
$dest_url=(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http").'://'.$parts['path'].'?'.$dest_query; //add query to host
header("Location: ".$dest_url); //reload page

答案 4 :(得分:0)

parse_url()parse_str()是错误的。正则表达式可以工作,但有破坏的倾向。如果要正确解构,进行更改,然后重新构建URL,您应该查看:

http://barebonescms.com/documentation/ultimate_web_scraper_toolkit/

ExtractURL()生成parse_url() - 类似输出,但做得更多(并且做得对)。 CondenseURL()ExtractURL()获取一个数组,并从信息中构造一个新的URL。这两个函数都在'support / http.php'文件中。

答案 5 :(得分:0)

多年后...... $_GET可以像PHP中的任何其他数组一样进行操作。只需unset密钥,然后使用http_build_query函数创建http查询。

// Populate _GET with sample data...
$_GET = array(
    'value_a' => "A",
    'key_to_remove' => "Don't delete me bro!",
    'value_b' => "B"
);
// Should output everything...
// "value_a=A&key_to_remove=Don%27t+delete+me+bro%21&value_b=B"
echo "\n".http_build_query( $_GET );

// Remove the key from _GET...
unset( $_GET[ 'key_to_remove' ] );
// Should output everything else...
// "value_a=A&value_b=B"
echo "\n".http_build_query( $_GET );

答案 6 :(得分:0)

这对我有用:

function removeParameterFromUrl($url, $key)
{
    $parsed = parse_url($url);
    $path = $parsed['path'];
    unset($_GET[$key]);
    if(!empty(http_build_query($_GET))){
      return $path .'?'. http_build_query($_GET);
    } else return $path;
}

答案 7 :(得分:0)

正确处理! !

remove_query('http://example.com/?a=valueWith**&**inside&b=value');

代码:

function remove_query($url, $which_argument=false){ 
    return preg_replace( '/'. ($which_argument ? '(\&|)'.$which_argument.'(\=(.*?)((?=&(?!amp\;))|$)|(.*?)\b)' : '(\?.*)').'/i' , '', $url);  
}