2016-11-21 3 views
1

Wie entferne ich bestimmte Parameter und ihren Wert von URL?Regex: Entfernen bestimmter Parameter und Wert von URL

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

Mein Urls sein pagename?page=2 oder pagename?param=235235&page=2 oder pagename?page=10&param=5431 oder usw.

ich page=x von url entfernen müssen.

Antwort

1

Ein anderer Ansatz ist mit PHP eingebaute URL Funktionen ohne regex. Eleganter IMHO

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

Sie haben in Ihrer Frage angegeben, dass Sie Seite = xx von die URL ENTFERNEN möchten.

Es gibt nichts wie der Geruch von regex am Nachmittag ... Also musste ich einen Stich an diesem und dem folgenden sollte es tun.

Ich bin sicher, dass es schlauer gemacht werden kann, aber es bringt Sie zum Laufen.

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

Sie beginnen also im einfachsten Fall und arbeiten sich hoch.

/* 
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 
*/ 

So ist es der Code innerhalb Funktion remove_page_from_url($url), die Sie interessieren.

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

?> 
Verwandte Themen