PHP preg_replace 表达式删除 URL 参数
Posted
技术标签:
【中文标题】PHP preg_replace 表达式删除 URL 参数【英文标题】:PHP preg_replace expression to remove URL parameter 【发布时间】:2013-03-24 20:51:39 【问题描述】:我想使用 preg_expression 从 URL 中删除所有出现的特定参数模式。如果存在,还删除最后一个“&” 模式如下:make=xy(“make”是固定的;“xy”可以是任意两个字母)
例子:
http://example.com/index.php?c=y&make=yu&do=ms&r=k&p=7&
处理preg_replace
后,结果应该是:
http://example.com/index.php?c=y&do=ms&r=k&p=7
我尝试使用:
$url = "index.php?ok=no&make=ae&make=as&something=no&make=gr";
$url = preg_replace('/(&?lang=..&?)/i', '', $url);
但是,这并没有很好地工作,因为我的 URL 中有 make=xx 的重复项(这种情况可能发生在我的应用程序中)。
【问题讨论】:
你为什么要使用lang
来替换make
?
抱歉 lang 本来就是要制作的。
【参考方案1】:
你不需要正则表达式:
$url = "http://example.com/index.php?ok=no&make=ae&make=as&something=no&make=gr&";
list($file, $parameters) = explode('?', $url);
parse_str($parameters, $output);
unset($output['make']); // remove the make parameter
$result = $file . '?' . http_build_query($output); // Rebuild the url
echo $result; // http://example.com/index.php?ok=no&something=no
【讨论】:
【参考方案2】:您可以尝试使用:
$str = parse_url($url, PHP_URL_QUERY);
$query = array();
parse_str($str, $query);
var_dump($query);
这会将查询作为数组返回给您。然后,您可以使用 http_build_query() 函数来恢复查询字符串中的数组。
但是如果你想使用正则表达式:
$url = "index.php?make=ae&ok=no&make=ae&make=as&something=no&make=gr";
echo $url."\n";
$url = preg_replace('/\b([&|&]0,1make=[^&]*)\b/i','',$url);
$url = str_replace('?&','?',$url);
echo $url;
这将删除 URL 中的所有 make
【讨论】:
这两种方法都不适合我。第一种方法返回 NULL,第二种方法返回奇怪的输出 我编辑了帖子,在我的测试中,正则表达式运行良好。在第一种方式中,我忘记了 parse_str 具有通过引用传递的数组,并且没有返回它。【参考方案3】:使用rtrim
,您可以删除最后一个&
$url = rtrim("http://example.com/index.php?c=y&make=yu&do=ms&r=k&p=7&","&");
$url = preg_replace('~&make=([a-z\-]*)~si', '', $url);
【讨论】:
如果make
直接出现在index.php?
之后,则不会被替换。此外,所有make=
的值也不会被删除【参考方案4】:
$url = "index.php?ok=no&make=ae&make=as&something=no&make=gr";
$url = preg_replace('/(&?make=[a-z]2)/i', '', $url);
echo $url;
【讨论】:
如果$url = "index.php?make=xx&ok=no"
.. 结果会在index?
之后留下额外的&
.. 这是不正确的【参考方案5】:
只需使用 preg_replace
$x = "http://example.com/index.php?c1=y&make=yu&do1=ms&r1=k&p1=7&";
$x = preg_replace(['/(\?make=[a-z]*[&])/i', '/(\&make=[a-z]*[^(&*)])/i', '/&(?!\w)/i'], ['?','',''], $x);
echo $x;
结果是:http://example.com/index.php?c1=y&do1=ms&r1=k&p1=7
希望对大家有所帮助。
【讨论】:
以上是关于PHP preg_replace 表达式删除 URL 参数的主要内容,如果未能解决你的问题,请参考以下文章
PHP php使用preg_replace从文本中删除特殊字符
[PHP] PHP7已经删除了preg_replace的e修饰符