【问题标题】:preg_replace for Get Parameter - /index.php?color=blue&size=xl获取参数的 preg_replace - /index.php?color=blue&size=xl
【发布时间】:2013-06-21 16:48:01
【问题描述】:

我有这个网址 /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);

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

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

编辑2: 有这个解决方案:

// 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

谢谢大家。

【问题讨论】:

标签: php get preg-replace


【解决方案1】:

这将允许您使用$remove 数组准确指定要删除的参数。它通过使用parse_url() 解析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;

【讨论】:

    【解决方案2】:
    list($done) = explode("?", $url);
    

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

    【讨论】:

    • 对我有用 :-) - 我会看看其他用户会提供什么。
    【解决方案3】:

    试试这个:

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

    对于低于 php 5.4 的 php 版本:

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

    【讨论】:

    • 我收到此消息,其中包含以下代码“解析错误:语法错误,意外 '[' in ... 第 26 行”
    • @mistertodd:因为你的php版本低于5.4,测试第二个版本。
    • @casimir 您有直接清洁特定部件的解决方案吗? (我在上面的编辑)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 2021-11-12
    • 2014-03-13
    • 2021-06-29
    • 1970-01-01
    • 2022-09-26
    • 2020-09-20
    相关资源
    最近更新 更多