如何從url中刪除某些參數及其值?正則表達式:從URL中刪除某些參數和值
<?php $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; ?>
我的網址可以pagename?page=2
或pagename?param=235235&page=2
或pagename?page=10¶m=5431
或等
我需要從URL中移除page=x
。
如何從url中刪除某些參數及其值?正則表達式:從URL中刪除某些參數和值
<?php $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; ?>
我的網址可以pagename?page=2
或pagename?param=235235&page=2
或pagename?page=10¶m=5431
或等
我需要從URL中移除page=x
。
一種不同的方法使用PHP的內置鏈接功能,而正則表達式。更優雅恕我直言
function removeParamFromURL($param, $url) {
$parsed_url = parse_url($url);
parse_str($parsed_url["query"], $querystringarray);
unset($querystringarray[$param]);
$parsed_url["query"] = http_build_query($querystringarray);
return $parsed_url["scheme"] . "://" . $parsed_url["host"] . $parsed_url["path"] . "?" . $parsed_url["query"];
}
$url = "http://example.com/aaa/bbb/pagename/page.php?param=235235&page=2";
print $finalurl = removeParamFromURL("page", $url);
你已經在你的問題中說過你想從 URL中刪除page = xx。
沒有什麼比在下午的正則表達式的氣味...所以我刺了這個,下面應該做的伎倆。
我相信它可以做得更聰明,但它會讓你啓動並運行。
<?php
/*
* My urls can be
* pagename?page=2 or
* pagename?param=235235&page=2 or
* pagename?page=10¶m=5431 or etc.
*/
function remove_page_from_url($url){
// For the case where ?page=xx¶m
if (preg_match('/\?page=[0-9]{0,}&/',$url)){
$url = preg_replace('/&/','?',$url,1); // Only replace the 1st one.
}
return preg_replace('/[\?|&]page=[0-9]{0,}/','',$url);
}
// The Testing during development
//Case 1: This works
$url = 'pagename?page=10';
echo remove_page_from_url($url);
echo '<br>';
//Case 2: This works
$url = 'pagename?param=235235&page=2';
echo remove_page_from_url($url);
echo '<br>';
//Case 3: This works
//This messes things up as we also have to change a & to a ?
$url = 'pagename?page=10¶m=5431';
echo remove_page_from_url($url);
echo '<br>';
//Case 4: This Works
//This messes things up as we also have to change a & to a ? but only the first one.
$url = 'pagename?page=10¶m=5431&something=2';
echo remove_page_from_url($url);
echo '<br>';
所以,你從最簡單的情況開始,一路順風。
/*
The Results
pagename?page=10
=> pagename
pagename?param=235235&page=2
=> pagename?param=235235
pagename?page=10¶m=5431
=> pagename?param=5431
pagename?page=10¶m=5431&something=2
=> pagename?param=5431&something=2
*/
所以這裏面的功能remove_page_from_url($url)
,你感興趣的代碼。
Remove dynamic parameters from a URL
<?php
function remove_url_parmeter($url,$parameter_key){
if($parameter_key && $url){
foreach($parameter_key as $val){
if (preg_match('/[\?|&]'.$val.'=[0-9]{0,}/',$url)){
$url = preg_replace('/&/','?',$url,1);
}
$url = preg_replace('/[\?|&]'.$val.'=[0-9]{0,}/','',$url);
}
}else{
$url = 'This is not work';
}
return $url;
}
$url = "http://example.com/pagename?page=5¶m=5431&page1=10&somepage=3";
//$parameter_key =array('page','page1');
echo remove_url_parmeter($url,array('page','page1'));
?>