【问题标题】:PHP Query String ManipulationPHP查询字符串操作
【发布时间】:2011-06-11 02:29:38
【问题描述】:

我在处理当前 URL 查询字符串以在末尾添加额外参数时遇到了一个小问题。

例如,假设产品有一个类别布局,URL 将是:

index.php?category=3&type=5

现在,在该页面上,我有一个用于表格或网格布局的链接。在我目前拥有的那些网址中:

<a href="index.php?<?php echo preg_replace($array,'',$_SERVER['QUERY_STRING']); ?>&layout=grid" ...

然后,我也对表 href 执行相同的操作。同样在我的数组中,我刚刚:

$array = array ( '/&layout=table/', '/&layout=grid/' )

这是正确的方法,还是有更好的方法?我问是因为没有preg_replace,每次单击它都会继续添加相同的layout参数,所以它也会显示上一个参数,然后是下一个,然后是下一个..而不删除以前的layout参数。

对此的任何见解将不胜感激。

编辑: 感谢下面的答案,我创建了一个小函数:

function buildQuery($key,$value) {
$params = $_GET;
$params[$key] = $value;

return http_build_query($params);
}

那么它只是一个问题:

<a href="index.php?<?php echo buildQuery('layout','grid'); ?>">grid</a>

这可能看起来毫无意义,但我喜欢在没有额外设置变量的情况下拥有我的视图/模板文件。我是一个干净的怪胎。我什至可能会返回“index.php?”有了它,我就可以更懒了,反正现在可以玩了:)..

【问题讨论】:

    标签: php url query-string


    【解决方案1】:

    如果要修改查询字符串,只需修改 GET 变量并重建查询字符串会更容易:

    $params = $_GET;
    $params['layout'] = 'new_layout';
    

    然后:

    <a href="index.php?<?php echo http_build_query($params); ?>">...</a>
    

    虽然你也可以这样做:

    <a href="index.php?<?php echo preg_replace('/(^|&)layout=[^&]*/', '\\1layout=new_layout', $_SERVER['QUERY_STRING']; ?>">...</a>
    

    【讨论】:

    • 非常感谢您指出我从未知道存在的 http_build_query 函数。也感谢您清理我最初的问题,因为我非常着急。但我确实改变了它,因为它意味着没有'preg_replace'而不是'preg_replace'。这个功能也让我快速创建了一个快速简单的功能,也让未来的场景变得轻而易举。我的功能已在我的问题中进行了编辑..
    【解决方案2】:

    考虑直接解析$_GET参数来构建你的url。

    我认为您想要做的是将链接转到 index.php 并使用与您目前所有相同的参数,但将布局更改为网格。我建议你这样做:

    <?php
    // make a copy of the $_GET array with all the parameters from the query string
    $params = $_GET;
    // set layout=grid regardless of whether layout was set before or its value
    $params['layout'] = 'grid';
    // generate a query string to append to your urls.
    // Note that &amp; is used as the arg separator; this is necessary for XHTML and advised for HTML
    $queryString = http_build_query($params, '', '&amp;');
    ?>
    
    href="index.php?<?php echo $queryString; ?>">
    

    这比尝试自己编辑和修复 $_SERVER['QUERY_STRING'] 要容易得多。

    【讨论】:

    • 我也感谢你的回答,但不幸的是我没有代表投票给你 1。
    • 我还发现没有'&'它仍然有效。没有它会有问题吗?
    • @Edhen 只需$queryString = http_build_query($params); 就不会成为问题
    猜你喜欢
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    相关资源
    最近更新 更多