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\";
<?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 ;)
<?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