Php 正则表达式:从URL中删除某些参数和值
如何从url中删除某些参数及其值Php 正则表达式:从URL中删除某些参数和值,php,regex,Php,Regex,如何从url中删除某些参数及其值 <?php $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; ?> 我的URL可以是pagename?page=2或pagename?param=235235&page=2或pagename?page=10¶m=5431等 我需要从url中删除page=x 您已在问题中声明希望从中删除page=xx URL 没有什么能比得上下午的regex的味道。。。因此,我尝试了一下,
<?php $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; ?>
我的URL可以是pagename?page=2
或pagename?param=235235&page=2
或pagename?page=10¶m=5431
等
我需要从url中删除page=x
您已在问题中声明希望从中删除page=xx
URL
没有什么能比得上下午的regex的味道。。。因此,我尝试了一下,下面的内容应该可以解决这个问题
我相信这可以做得更聪明些,但它能让你振作起来
<?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>';
因此,您感兴趣的是函数remove\u page\u from\u url($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'));
?>
使用php内置url函数而不使用正则表达式的另一种方法。更优雅的伊姆霍
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);
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);