2013-06-21 25 views
-2

我有這個網址/index.php?color=blue &大小= XLpreg_replace函數的GET參數 - /index.php?color=blue&size=xl

擺脫GET參數的,我用這個代碼:

$done = preg_replace('/(.*)(\?|&)color=[^&]*(?(1)&|)?/i', "$1", $url); 
echo $done; 
"output: index.phpsize=xl" 

現在我需要清理「尺寸」部分了。嘗試了兩行preg_replace,但它沒有工作。

$done = preg_replace('/(.*)(\?|&)color=[^&]*(?(1)&|)?/i', "$1", $url); 
echo $done; 
$done2 = preg_replace('/(.*)(\?|&)size=[^&]*(?(1)&|)?/i', "$1", $done); 

編輯:我真的需要一個解決方案,我可以清理確切的參數「顏色」或「大小」。

有時我只會刪除其中的一個。

EDIT2: 有此解決方案:

// Url is: index.php?color=black&size=xl&price=20 

function removeqsvar($url, $varname) { 
return preg_replace('/([?&])'.$varname.'=[^&]+(&|$)/','$1',$url); 
} 
$url = removeqsvar($url, color); 
echo removeqsvar($url, price); 

// will output: index.php?size=xl 

謝謝大家。

+0

可能重複(http://stackoverflow.com/questions/1251582/beautiful-way-to-remove-get-variables-with-php) – nickb

+0

你知道嗎,如何從3中刪除2個變量? – mistertodd

+0

當然,請參閱我的回答:http://stackoverflow.com/a/17240988/862594 – nickb

回答

0

這將允許你準確指定使用$remove陣列刪除哪些參數。它通過解析URL parse_url(),然後抓取查詢字符串並使用parse_str()解析它。

從那裏,它很簡單 - 迭代URL中的參數,如果其中一個在$remove數組中,則將其從$params數組中刪除。最後,如果我們有要添加到URL的參數,我們將它們添加回http_build_query()

$url = '/index.php?color=blue&size=xl'; // Your input URL 
$remove = array('color', 'size'); // Change this to remove what you want 

$parts = parse_url($url); 
parse_str($parts['query'], $params); 

foreach($params as $k => $v) { 
    if(in_array($k, $remove)) { 
     unset($params[$k]); 
    } 
} 

$url = $parts['path'] . ((count($params) > 0) ? '?' . http_build_query($params) : ''); 
echo $url; 
的[美麗的方法,以消除與PHP GET變量?]
+0

你搖滾!謝謝你nickb - 強大的代碼和它的作品.. :-) – mistertodd

0

試試這個:

$result = explode('?', $url)[0]; 

的PHP版本比PHP 5.4低:

$tmp = explode('?', $url); 
$result = $tmp[0]; 
+0

返回值的立即索引從PHP 5.4起工作。 – Halcyon

+0

@FritsvanCampen:對,我爲這種情況做了編輯。 –

+0

我得到這個消息與此代碼「解析錯誤:語法錯誤,意外'['in ... line 26」 – mistertodd

0
list($done) = explode("?", $url); 

這snytax也能在PHP 5.3和更低

+0

適合我:-) - 我會看到其他用戶將提供什麼。 – mistertodd