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


Remove specific parameter from URL while preserving other parameters

我想从URL中删除参数:

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

我正在尝试得到这个结果:

  • https://stackoverflow.com/?name=alaa&
  • https://stackoverflow.com/?&star=5

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

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

依赖正则表达式有时会把事情搞砸。

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

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

完成后,使用 http_build_url() 函数使用所做的更改重新生成 URL。

在此处查看文档..

Parse_Url Http_build_query()

编辑

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

您甚至可以使用 explode() 和 & 作为分量计来完成此操作。

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

正确处理它! !

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);  
}

一个代码示例,我如何获取请求的 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

parse_url()parse_str()都是有问题的。 正则表达式可以工作,但有中断的趋势。 如果要正确解构、进行更改,然后重建 URL,则应查看:

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

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

多年后...$_GET 可以像 PHP 中的任何其他数组一样进行操作。只需取消设置密钥并使用 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 );
这对

我有用:

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;
}