better way to replace query string value in a given url

前端 未结 8 1998
南方客
南方客 2020-12-11 16:32

Okay.. so basically, say we have a link:

$url = \"http://www.site.com/index.php?sub=Mawson&state=QLD&cat=4&page=2&sort=z\";

相关标签:
8条回答
  • 2020-12-11 17:32
    <?php
    function change_query ( $url , $array ) {
        $url_decomposition = parse_url ($url);
        $cut_url = explode('?', $url);
        $queries = array_key_exists('query',$url_decomposition)?$url_decomposition['query']:false;
        $queries_array = array ();
        if ($queries) {
            $cut_queries   = explode('&', $queries);
            foreach ($cut_queries as $k => $v) {
                if ($v)
                {
                    $tmp = explode('=', $v);
                    if (sizeof($tmp ) < 2) $tmp[1] = true;
                    $queries_array[$tmp[0]] = urldecode($tmp[1]);
                }
            }
        }
        $newQueries = array_merge($queries_array,$array);
        return $cut_url[0].'?'.http_build_query($newQueries);
    }
    ?>
    

    Use like this :

    <?php
        echo change_query($myUrl, array('queryKey'=>'queryValue'));
    ?>
    

    I do that this morning, it seems to work in all case. You can change / add more than one query, with the array ;)

    0 讨论(0)
  • 2020-12-11 17:32
    <?php
    //current url: http://localhost/arters?sub=Mawson&state=QLD&cat=4&page=2&sort=a
    
    function change_query($queryKey, $queryValue){
        $queryStr = $_SERVER['QUERY_STRING'];
        parse_str($queryStr, $output);
        $output[$queryKey] = $queryValue;
        return http_build_query($output);
    }
    

    usage:

    <a href="?<?=change_query("sort",'z');?>">sort by z</a>
    

    // http://localhost/arters?sub=Mawson&state=QLD&cat=4&page=2&sort=z

    <a href="?<?=change_query("page",'5');?>">Page 5</a>
    

    // http://localhost/arters?sub=Mawson&state=QLD&cat=4&page=5&sort=a

    0 讨论(0)
提交回复
热议问题