我在PHP中有一个字符串,它是一个包含所有参数的URI:
$string = http://domain.com/php/doc.php?arg1=0&arg2=1&arg3=0
我想完全删除一个参数并返回保留字符串。例如,我想删除arg3
并最终获得:
$string = http://domain.com/php/doc.php?arg1=0&arg2=1
我总是希望删除相同的参数(arg3
),它可能是也可能不是最后一个参数。
思想?
编辑:arg3
中可能有一堆奇怪的角色,所以我最喜欢这样做的方式(实质上)是:
$newstring = remove $_GET["arg3"] from $string;
答案 0 :(得分:8)
这里没有真正的理由使用正则表达式,你可以使用字符串和数组函数。
?
之后?
可以使用explode
来获取子字符串,substr
来获取最后一个{{1}的位置}}}进入数组,并使用strrpos
删除arg3
,然后使用unset
将字符串重新组合在一起。:
$string = "http://domain.com/php/doc.php?arg1=0&arg2=1&arg3=0";
$pos = strrpos($string, "?"); // get the position of the last ? in the string
$query_string_parts = array();
foreach (explode("&", substr($string, $pos + 1)) as $q)
{
list($key, $val) = explode("=", $q);
if ($key != "arg3")
{
// keep track of the parts that don't have arg3 as the key
$query_string_parts[] = "$key=$val";
}
}
// rebuild the string
$result = substr($string, 0, $pos + 1) . join($query_string_parts);
在join
答案 1 :(得分:0)
preg_replace("arg3=[^&]*(&|$)", "", $string)
我假设网址本身不会包含arg3=
,这在一个理智的世界中应该是一个安全的假设。
答案 2 :(得分:0)
$new = preg_replace('/&arg3=[^&]*/', '', $string);
答案 3 :(得分:0)
这也应该有用,例如,考虑到页面锚点(#)以及你提到的那些“怪异角色”中的至少一些,但似乎并不担心:
function remove_query_part($url, $term)
{
$query_str = parse_url($url, PHP_URL_QUERY);
if ($frag = parse_url($url, PHP_URL_FRAGMENT)) {
$frag = '#' . $frag;
}
parse_str($query_str, $query_arr);
unset($query_arr[$term]);
$new = '?' . http_build_query($query_arr) . $frag;
return str_replace(strstr($url, '?'), $new, $url);
}
演示:
$string[] = 'http://domain.com/php/doc.php?arg1=0&arg2=1&arg3=0';
$string[] = 'http://domain.com/php/doc.php?arg1=0&arg2=1';
$string[] = 'http://domain.com/php/doc.php?arg1=0&arg2=1&arg3=0#frag';
$string[] = 'http://domain.com/php/doc.php?arg1=0&arg2=1&arg3=0&arg4=4';
$string[] = 'http://domain.com/php/doc.php';
$string[] = 'http://domain.com/php/doc.php#frag';
$string[] = 'http://example.com?arg1=question?mark&arg2=equal=sign&arg3=hello';
foreach ($string as $str) {
echo remove_query_part($str, 'arg3') . "\n";
}
输出:
http://domain.com/php/doc.php?arg1=0&arg2=1
http://domain.com/php/doc.php?arg1=0&arg2=1
http://domain.com/php/doc.php?arg1=0&arg2=1#frag
http://domain.com/php/doc.php?arg1=0&arg2=1&arg4=4
http://domain.com/php/doc.php
http://domain.com/php/doc.php#frag
http://example.com?arg1=question%3Fmark&arg2=equal%3Dsign
仅按照显示进行测试。