2013-03-21 113 views
0

我想這個URI來替換這個URIPHP正則表達式的preg_replace

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

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

==>我要刪除 「&品牌=索尼」

我嘗試這樣做:

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

bu t將其不特定的情況下工作:的情況下在URI參數「TOTO」不存在

所以,如果我做

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

它不工作==>「 &品牌=索尼「仍然出現

那麼我該怎麼辦?

+0

你沒有指定'preg_replace'到任何結果,因此它被執行後基本喪失。 – 2013-03-21 17:29:29

回答

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); 
?> 
6

我不會使用正則表達式。

首先,使用parse_url將網址拆分爲小塊和小塊。
然後,在查詢部分使用parse_str

做任何你想要的查詢鍵,然後把它全部結合起來。
要構建查詢字符串返回:http_build_query
然後建立使用url http_build_url

0
preg_replace("/\&brand=Sony/", "", $uri); 
+0

這是不好的,如果品牌是第一個參數後?並不是 &。 – Adidi 2013-03-21 17:40:32

+0

好點感謝 – suspectus 2013-03-21 17:41:07

0

如何:

preg_replace('/[\?&]brand=\w*/', '', $url); 
+0

這就是如果你想刪除任何品牌。如果你只想刪除索尼,那麼嫌疑人的答案是正確的。 – ezeedub 2013-03-21 17:35:12

+0

如果品牌價值包含的字符不是一個單詞 - 比如#或其他東西,這不是一個好的解決方案。對於它的解決方案是任何字符不是下一個參數& - [^&] +像我的解決方案:)和平 – Adidi 2013-03-21 17:38:23

+0

好點。你應該檢查'&'或'?'太。但實際上我們都錯了,錯位是正確的。 – ezeedub 2013-03-21 18:34:45

0

如果你想要的關鍵品牌價值

preg_replace('/&?brand=[^&]+/i','',$url); 
0
(^.*)(&brand=.*)(&.*)? 
+0

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 – 2013-03-21 17:53:12

+0

這只是最後一個問號的原始正則表達式,它可以解決問題。 – 2013-03-21 18:52:49

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