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;
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;
Vous voulez utiliser preg_replace
à la place pour cela:
$newuri = preg_replace('/&start=(\d+)/','',$uri);
Il est inutile de capturer le \ d + entre parenthèses –
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
Comme le demandeur est un débutant, peut-être un peu plus de détails sur ce que fait le code? – random
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)
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);
...
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
Fixé. Maintenant, il supprime la valeur 2 sans utiliser regex. – rogeriopvl
Et s'ils ont ** 3 ** au lieu de ** 2 **? – random
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?
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
if(isset($_GET['start']))
{
$pageNo = $_GET['start'];
$TmpString = '&start='.$pageNo;
$newuri = str_replace($TmpString,"",$url);
// removed "&start=2"
echo $newuri;
}
et vous question est? – SilentGhost
S'il vous plaît pouvez-vous poser votre question un peu plus clairement? –