-2

我有这个网址 /index.php?color=blue&size=xl

为了摆脱 get 参数,我使用以下代码:

$done = preg_replace('/(.*)(\?|&)color=[^&]*(?(1)&|)?/i', "$1", $url);
echo $done;
"output: index.phpsize=xl"

现在我也需要清理“尺寸”部分。已尝试使用两行 preg_replace,但它不起作用。

$done = preg_replace('/(.*)(\?|&)color=[^&]*(?(1)&|)?/i', "$1", $url);
echo $done;
$done2 = preg_replace('/(.*)(\?|&)size=[^&]*(?(1)&|)?/i', "$1", $done);

编辑:我真的需要一个解决方案,我可以清理确切的参数“颜色”或“大小”。

有时我只会删除其中一个。

Edit2:有这个解决方案:

// Url is: index.php?color=black&size=xl&price=20

function removeqsvar($url, $varname) {
return preg_replace('/([?&])'.$varname.'=[^&]+(&|$)/','$1',$url);
}
$url = removeqsvar($url, color);
echo removeqsvar($url, price);

// will output: index.php?size=xl

谢谢你们。

4

3 回答 3

0

尝试这个:

$result = explode('?', $url)[0];

对于低于 php 5.4 的 php 版本:

$tmp = explode('?', $url);
$result = $tmp[0];
于 2013-06-21T16:52:15.673 回答
0
list($done) = explode("?", $url);

此语法也适用于 PHP 5.3 及更低版本

于 2013-06-21T16:54:05.457 回答
0

这将允许您使用$remove数组准确指定要删除的参数。它的工作原理是使用 解析 URL parse_url(),然后获取查询字符串并使用 解析它parse_str()

从那里开始,它很简单 - 遍历 URL 中的参数,如果其中一个在$remove数组中,则将其从数组中删除$params。最后,如果我们有要添加到 URL 的参数,我们用http_build_query().

$url = '/index.php?color=blue&size=xl'; // Your input URL
$remove = array( 'color', 'size'); // Change this to remove what you want

$parts = parse_url( $url);
parse_str( $parts['query'], $params);

foreach( $params as $k => $v) {
    if( in_array( $k, $remove)) {
        unset( $params[$k]);
    }
}

$url = $parts['path'] . ((count( $params) > 0) ? '?' . http_build_query( $params) : '');
echo $url;
于 2013-06-21T17:24:04.437 回答