我想从网址中删除参数:
$linkExample1='https://stackoverflow.com/?name=alaa&counter=1';
$linkExample2='https://stackoverflow.com/?counter=4&star=5';
我想得到这个结果:
我正在尝试使用preg_replace
,但我不知道如何做到这一点。
答案 0 :(得分:7)
$link = preg_replace('~(\?|&)counter=[^&]*~','$1',$link);
答案 1 :(得分:3)
依靠正则表达式有时会搞砸......
您应该使用parse_url()
函数来分解整个URL并将其作为关联数组呈现给您。
拥有该数组后,您可以根据需要进行编辑并删除参数。
完成后,使用http_build_url()
功能重建URL并进行更改。
查看此处的文档..
修改强>
哎呀,忘了提。获得参数字符串后,您显然需要将参数分开作为单独的参数。为此,您可以提供字符串作为parse_str()函数的输入。您甚至可以使用explode()和&作为完成这项工作的分界线。
答案 2 :(得分:1)
我建议使用parse_url()和http_build_query()的组合。
答案 3 :(得分:1)
一个代码示例我如何获取请求的URL并删除名为" name"的参数,然后重新加载页面:
$url = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; //complete url
$parts = parse_url($url);
parse_str($parts['query'], $query); //grab the query part
unset($query['name']); //remove a parameter from query
$dest_query = http_build_query($query); //rebuild new query
$dest_url=(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http").'://'.$parts['path'].'?'.$dest_query; //add query to host
header("Location: ".$dest_url); //reload page
答案 4 :(得分:0)
parse_url()
和parse_str()
是错误的。正则表达式可以工作,但有破坏的倾向。如果要正确解构,进行更改,然后重新构建URL,您应该查看:
http://barebonescms.com/documentation/ultimate_web_scraper_toolkit/
ExtractURL()
生成parse_url()
- 类似输出,但做得更多(并且做得对)。 CondenseURL()
从ExtractURL()
获取一个数组,并从信息中构造一个新的URL。这两个函数都在'support / http.php'文件中。
答案 5 :(得分:0)
多年后...... $_GET可以像PHP中的任何其他数组一样进行操作。只需unset密钥,然后使用http_build_query函数创建http查询。
// Populate _GET with sample data...
$_GET = array(
'value_a' => "A",
'key_to_remove' => "Don't delete me bro!",
'value_b' => "B"
);
// Should output everything...
// "value_a=A&key_to_remove=Don%27t+delete+me+bro%21&value_b=B"
echo "\n".http_build_query( $_GET );
// Remove the key from _GET...
unset( $_GET[ 'key_to_remove' ] );
// Should output everything else...
// "value_a=A&value_b=B"
echo "\n".http_build_query( $_GET );
答案 6 :(得分:0)
这对我有用:
function removeParameterFromUrl($url, $key)
{
$parsed = parse_url($url);
$path = $parsed['path'];
unset($_GET[$key]);
if(!empty(http_build_query($_GET))){
return $path .'?'. http_build_query($_GET);
} else return $path;
}
答案 7 :(得分:0)
remove_query('http://example.com/?a=valueWith**&**inside&b=value');
代码:
function remove_query($url, $which_argument=false){
return preg_replace( '/'. ($which_argument ? '(\&|)'.$which_argument.'(\=(.*?)((?=&(?!amp\;))|$)|(.*?)\b)' : '(\?.*)').'/i' , '', $url);
}