0

我想替换这个 URI

http://localhost/prixou/index.php?page=list&category=1&sub=1&subsub=0&brand=Sony&toto=titi

通过这个 URI

http://localhost/prixou/index.php?page=list&category=1&sub=1&subsub=0&kljklj=sdfsd

==> 我想删除“&brand=Sony”

我试过这个:

preg_replace('/(^.*)(&brand=.*)(&.*)/', '$1$3', 'http://localhost/prixou/index.php?page=list&category=1&sub=1&subsub=0&brand=Sony&toto=titi');

但它在特定情况下不起作用:URI中的参数“toto”不存在的情况

所以如果我这样做

preg_replace('/(^.*)(&brand=.*)(&.*)/', '$1$3', 'http://localhost/prixou/index.php?page=list&category=1&sub=1&subsub=0&brand=Sony'); 

它不起作用 ==> "&brand=Sony" 仍然出现

那我该怎么办?

4

7 回答 7

6

我不会使用正则表达式。

首先,使用parse_url将 url 拆分成各个部分。
然后,在查询部分使用parse_str

对查询键做任何你想做的事情,然后将它们组合回来。
构建查询字符串:http_build_query然后使用http_build_url
构建 url

于 2013-03-21T17:30:43.220 回答
0
 preg_replace("/\&brand=Sony/", "", $uri);
于 2013-03-21T17:32:43.667 回答
0

怎么样:

preg_replace('/[\?&]brand=\w*/', '', $url);
于 2013-03-21T17:33:05.083 回答
0

如果你想要关键品牌的价值

preg_replace('/&?brand=[^&]+/i','',$url);
于 2013-03-21T17:33:16.243 回答
0
(^.*)(&brand=.*)(&.*)?
于 2013-03-21T17:35:01.773 回答
0

你可以添加?:

(^.*)(&brand=.*)(&.*)?

echo preg_replace(
'/(^.*)(&brand=.*)(&.*)?/', 
'$1$3', 
'http://localhost/prixou/index.php?page=list&category=1&sub=1&subsub=0&brand=Sony'); 

输出:

http://localhost/prixou/index.php?page=list&category=1&sub=1&subsub=0
于 2013-03-21T17:35:47.447 回答
0

谢谢大家。所以这是我的最终解决方案,它工作正常:

<?php
$actual_link = 'index.php?'.$_SERVER['QUERY_STRING']; //complete link of my page
$parsedURL= parse_url($actual_link);
parse_str($parsedURL["query"],$tabParametersQuery);    
$tabParametersQuery['brand']="";
$newURL = "index.php?".http_build_query($tabParametersQuery);
?>
于 2013-03-21T19:54:59.683 回答