Php 正则表达式:从URL中删除某些参数和值

Php 正则表达式:从URL中删除某些参数和值,php,regex,Php,Regex,如何从url中删除某些参数及其值 <?php $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; ?> 我的URL可以是pagename?page=2或pagename?param=235235&page=2或pagename?page=10¶m=5431等 我需要从url中删除page=x 您已在问题中声明希望从中删除page=xx URL 没有什么能比得上下午的regex的味道。。。因此,我尝试了一下,

如何从url中删除某些参数及其值

<?php $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; ?>

我的URL可以是
pagename?page=2
pagename?param=235235&page=2
pagename?page=10¶m=5431

我需要从url中删除
page=x

您已在问题中声明希望从中删除page=xx URL

没有什么能比得上下午的regex的味道。。。因此,我尝试了一下,下面的内容应该可以解决这个问题

我相信这可以做得更聪明些,但它能让你振作起来

<?php
/*
 * My urls can be
 * pagename?page=2 or
 * pagename?param=235235&page=2 or
 * pagename?page=10&param=5431 or etc.
 */
function remove_page_from_url($url){
    // For the case where ?page=xx&param
    if (preg_match('/\?page=[0-9]{0,}&/',$url)){
        $url =  preg_replace('/&/','?',$url,1); // Only replace the 1st one.
    }
    return preg_replace('/[\?|&]page=[0-9]{0,}/','',$url);
}

// The Testing during development

//Case 1: This works
$url = 'pagename?page=10';
echo remove_page_from_url($url);
echo '<br>';

//Case 2: This works
$url = 'pagename?param=235235&page=2';
echo remove_page_from_url($url);
echo '<br>';

//Case 3: This works
//This messes things up as we also have to change a & to a ?
$url = 'pagename?page=10&param=5431';
echo remove_page_from_url($url);
echo '<br>';

//Case 4: This Works
//This messes things up as we also have to change a & to a ? but only the first one.
$url = 'pagename?page=10&param=5431&something=2';
echo remove_page_from_url($url);
echo '<br>';
因此,您感兴趣的是函数
remove\u page\u from\u url($url)
中的代码。

从url中删除动态参数
Remove dynamic parameters from a URL

 <?php
function remove_url_parmeter($url,$parameter_key){
        if($parameter_key && $url){
            foreach($parameter_key as $val){
                 if (preg_match('/[\?|&]'.$val.'=[0-9]{0,}/',$url)){
                    $url =  preg_replace('/&/','?',$url,1);
                 }
                 $url = preg_replace('/[\?|&]'.$val.'=[0-9]{0,}/','',$url);
            }
        }else{
            $url = 'This is not work';
        }
    return $url;

}

$url = "http://example.com/pagename?page=5&param=5431&page1=10&somepage=3";
//$parameter_key =array('page','page1');
echo remove_url_parmeter($url,array('page','page1'));

?>

使用php内置url函数而不使用正则表达式的另一种方法。更优雅的伊姆霍

function removeParamFromURL($param, $url) {
    $parsed_url = parse_url($url);
    parse_str($parsed_url["query"], $querystringarray);
    unset($querystringarray[$param]);
    $parsed_url["query"] = http_build_query($querystringarray);
    return $parsed_url["scheme"] . "://" . $parsed_url["host"] . $parsed_url["path"] . "?" . $parsed_url["query"];
}
$url = "http://example.com/aaa/bbb/pagename/page.php?param=235235&page=2";
print $finalurl = removeParamFromURL("page", $url);
function removeParamFromURL($param, $url) {
    $parsed_url = parse_url($url);
    parse_str($parsed_url["query"], $querystringarray);
    unset($querystringarray[$param]);
    $parsed_url["query"] = http_build_query($querystringarray);
    return $parsed_url["scheme"] . "://" . $parsed_url["host"] . $parsed_url["path"] . "?" . $parsed_url["query"];
}
$url = "http://example.com/aaa/bbb/pagename/page.php?param=235235&page=2";
print $finalurl = removeParamFromURL("page", $url);