2009-10-15 3 views
0

Je veux supprimer "& start = 2" d'une URL donnée. C'est ce que j'ai essayé:PHP str_replace à l'adresse URL

$uri = "http://test.com/test/?q=Marketing&start=2"; 

$newuri = str_replace("&start=","",$url); 

echo $newuri; 
+0

et vous question est? – SilentGhost

+0

S'il vous plaît pouvez-vous poser votre question un peu plus clairement? –

Répondre

6

Vous voulez utiliser preg_replace à la place pour cela:

$newuri = preg_replace('/&start=(\d+)/','',$uri); 
+0

Il est inutile de capturer le \ d + entre parenthèses –

+0

Right ... mais cela aide du point de vue de la lisibilité. Pas critique dans cet exemple, mais c'est une bonne pratique lorsque des motifs regex gigantesques apparaissent. – brianreavis

+0

Comme le demandeur est un débutant, peut-être un peu plus de détails sur ce que fait le code? – random

0

Rappelez-vous qu'il est encore un URI valide si la position des éléments querystring est changé. Donc le paramètre start peut être le premier, donc il peut être précédé d'un ? au lieu d'un &.

Donc, ce regex couvre les deux cas:

preg_replace("#[\?&]start=\d+#", '', $uri)

3

Vous passez $ url comme argument pour str_replace. Mais la variable qui a l'url s'appelle $ uri.

$uri = "http://test.com/test/?q=Marketing&start=2"; 

$newuri = str_replace("&start=2","",$uri); 

... 
+0

Cela ne supprime pas réellement la valeur numérique '2' de' start' comme l'OP l'exige. Une solution générique permettant des nombres arbitraires aurait besoin d'une fonction de remplacement d'expression régulière. – pavium

+0

Fixé. Maintenant, il supprime la valeur 2 sans utiliser regex. – rogeriopvl

+1

Et s'ils ont ** 3 ** au lieu de ** 2 **? – random

1

Juste pour lancer une solution sans regex là:

// Grab the individual components of the URL 
$uri_components = parse_url($uri); 

// Take the query string from the url, break out the key:value pairs 
// then put the keys and values into an associative array 
foreach (explode('&', $uri_components['query']) as $pair) { 
    list($key,$value) = explode('=', $pair); 
    $query_params[$key] = $value; 
} 

// Remove the 'start' pair from the array and start reassembling the query string 
unset($query_params['start']); 
foreach ($query_params as $key=>$value) 
    $value ? $new_query_params[] = $key."=".$value : $new_query_params[] = $key; 

// Now reassemble the whole URL (including the bits removed by parse_url) 
$uri_components['scheme'] .= "://"; 
$uri_components['query'] = "?".implode($new_query_params,"&"); 
$newuri = implode($uri_components); 

Certes, il est massivement bavard par rapport aux solutions basées sur des expressions régulières, mais il pourrait fournir une flexibilité supplémentaire sur la ligne?

0

Essayez cette solution gratuite regex:

$uri = "http://test.com/test/?q=Marketing&start=2"; 
$QueryPos = strpos($uri, '&start='); //find the position of '&start=' 
$newURI = substr($uri, 0, -(strlen($uri)-$QueryPos)); //remove everything from the start of $QueryPos to end 
echo $newURI; //OUTPUT: http://test.com/test/?q=Marketing 
0
if(isset($_GET['start'])) 

{ 

    $pageNo = $_GET['start']; 

    $TmpString = '&start='.$pageNo; 

    $newuri = str_replace($TmpString,"",$url); 

    // removed "&start=2" 

    echo $newuri; 

} 
Questions connexes