函数使用php删除GET变量
我有这个URI 我使用以下代码获取URI的basename函数使用php删除GET变量,php,string,Php,String,我有这个URI 我使用以下代码获取URI的basename $basename = basename($_SERVER['REQUEST_URI']); 上面的代码给出了以下字符串 php?属性&状态=av&page=1 我想从字符串中删除最后一个变量,即&page=1。请注意,页面的值并不总是1。记住这一点,我希望以这种方式修剪变量 从字符串的最后一个位置修剪到第一个分隔符,即& 更新: 我想从字符串中删除&page=1,无论它位于哪个位置 我该怎么做?有很多路通往罗马。我会用正则表达式:
$basename = basename($_SERVER['REQUEST_URI']);
上面的代码给出了以下字符串
php?属性&状态=av&page=1
我想从字符串中删除最后一个变量,即&page=1
。请注意,页面
的值并不总是1
。记住这一点,我希望以这种方式修剪变量
从字符串的最后一个位置修剪到第一个分隔符,即&
更新:
我想从字符串中删除&page=1
,无论它位于哪个位置
我该怎么做?有很多路通往罗马。我会用正则表达式:
$myString = 'index.php?properties&status=av&page=1';
$myNewString = preg_replace("/\&[a-z0-9]+=[0-9]+$/i","",$myString);
如果只需要&page=1
-类型参数,则最后一行是
$myNewString = preg_replace("/\&page=[0-9]+/i","",$myString);
如果您还希望消除page是唯一或第一个参数的可能性,请执行以下操作:
$myNewString = preg_replace("/[\&]*page=[0-9]+/i","",$myString);
您可以使用正则表达式(正如Chris所建议的),但它不是最有效的解决方案(使用该引擎会产生大量开销…使用一些字符串解析很容易:
<?php
//$url="http://localhost/index.php?properties&status=av&page=1";
$base=basename($_SERVER['REQUEST_URI']);
echo "Basename yields: $base<br />";
//Find the last ampersand
$lastAmp=strrpos($base,"&");
//Filter, catch no ampersands found
$removeLast=($lastAmp===false?$base:substr($base,0,$lastAmp));
echo "Without Last Parameter: $removeLast<br />";
?>
诀窍是,你能保证
$page
会被卡住吗?如果是-很好,如果不是…你所要求的可能并不总能解决问题。你应该将字符串解析为url(它是什么),而不是用正则表达式进行破解
现在只需删除参数
unset($queryParams['page']);
并重新生成url
$queryString = http_build_query($queryParams);
$url = $parts['path'] . '?' . $queryString;
适用于所有可能情况的正则表达式:
/(&|(?谢谢大家,但我认为我找到了更好的解决方案,@KingCrunch建议了一个我扩展的解决方案,并将其转换为函数。下面的函数可以在不使用任何正则表达式的情况下删除或取消设置任何URI变量。我正在发布它,因为它可能会帮助某些人
function unset_uri_var($variable, $uri) {
$parseUri = parse_url($uri);
$arrayUri = array();
parse_str($parseUri['query'], $arrayUri);
unset($arrayUri[$variable]);
$newUri = http_build_query($arrayUri);
$newUri = $parseUri['path'].'?'.$newUri;
return $newUri;
}
现在考虑以下URI
index.php?properties&status=av&page=1
//To remove properties variable
$url = unset_uri_var('properties', basename($_SERVER['REQUEST_URI']));
//Outputs index.php?page=1&status=av
//To remove page variable
$url = unset_uri_var('page', basename($_SERVER['REQUEST_URI']));
//Outputs index.php?properties=&status=av
希望这对某人有所帮助。谢谢@KingKrunch提供的解决方案:)如果是index.php呢?属性&page=1&status=av
?你想删除page
还是status
?看看这里,这可能会对你有所帮助。@mercator我想删除页面如果你只是在做分页,请检查$\u GET['page']
并增加它。@dnagirl,听起来不错,但你的解释是断章取义的。我知道我可以做到:)我想你的意思是strrpos($\u SERVER['REQUEST\u URI','&'))
Oops。谢谢。已编辑。虽然这会起作用,但它只会删除最后一个变量。很抱歉之前没有说明这一点,但我想修剪$page=1
,无论它的位置如何,它都可能出现在status=av
之前或之后。您可以使用内置PHP函数来执行此操作,但最好使用常规表达式在这种情况下,@root45…您至少可以在“剽窃”我的帖子之前有动机更改我的变量名;)感谢您的帮助,很抱歉之前没有提到这一点,但这只会删除字符串中的最后一个变量,而我希望删除&page=1
变量,而不管它的位置如何。preg\u replace(“/\&page=[0-9]+/i”,”,“,$myString);…仅页面:)index.php?page=123&properties&status=av
?他想匹配&,所以这包括在内。。。但该死,我会改变;)index.php?momomoonsterpage=123&properties&status=av
?(=>index.php?momomoonster&properties&status=av
;)正则表达式有许多缺陷。我不想让你难堪,但这样的事情往往会导致以后的怪异行为,很难追踪。这看起来真的很好。坦率地说,我期待着做这样的事情。非常好,对我来说也很好!谢谢KingCrunch:)你也可以做parse_str(html_entity_decode($parts['query']),$queryParams)
要在回音时保留&
,我很感激@Gabi Purcaru,或者KingCrunch的扩展解决方案,请检查我的答案。不幸的是,这会导致PHP<5.2.2最佳选项出现问题!非常感谢你!
$regex = '/(&|(?<=\?))page=.*?(?=&|$)/';
$urls = array(
'index.php?properties&status=av&page=1',
'index.php?properties&page=1&status=av',
'index.php?page=1',
);
foreach($urls as $url) {
echo preg_replace($regex, '', $url), "\n";
}
index.php?properties&status=av
index.php?properties&status=av
index.php?
function unset_uri_var($variable, $uri) {
$parseUri = parse_url($uri);
$arrayUri = array();
parse_str($parseUri['query'], $arrayUri);
unset($arrayUri[$variable]);
$newUri = http_build_query($arrayUri);
$newUri = $parseUri['path'].'?'.$newUri;
return $newUri;
}
index.php?properties&status=av&page=1
//To remove properties variable
$url = unset_uri_var('properties', basename($_SERVER['REQUEST_URI']));
//Outputs index.php?page=1&status=av
//To remove page variable
$url = unset_uri_var('page', basename($_SERVER['REQUEST_URI']));
//Outputs index.php?properties=&status=av