2016-11-21 99 views
1

如何從url中刪除某些參數及其值?正則表達式:從URL中刪除某些參數和值

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

我的網址可以pagename?page=2pagename?param=235235&page=2pagename?page=10&param=5431或等

我需要從URL中移除page=x

回答

1

一種不同的方法使用PHP的內置鏈接功能,而正則表達式。更優雅恕我直言

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

你已經在你的問題中說過你想從 URL中刪除page = xx。

沒有什麼比在下午的正則表達式的氣味...所以我刺了這個,下面應該做的伎倆。

我相信它可以做得更聰明,但它會讓你啓動並運行。

<?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>'; 

所以,你從最簡單的情況開始,一路順風。

/* 
The Results 

pagename?page=10 
=> pagename 

pagename?param=235235&page=2 
=> pagename?param=235235 

pagename?page=10&param=5431 
=> pagename?param=5431 

pagename?page=10&param=5431&something=2 
=> pagename?param=5431&something=2 
*/ 

所以這裏面的功能remove_page_from_url($url),你感興趣的代碼。

1
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')); 

?>