好吧..所以基本上,说我们有一个链接:
$url = "http://www.site.com/index.php?sub=Mawson&state=QLD&cat=4&page=2&sort=z";
Run Code Online (Sandbox Code Playgroud)
基本上,我需要创建一个函数,它替换URL中的每个东西,例如:
<a href="<?=$url;?>?sort=a">Sort by A-Z</a>
<a href="<?=$url;?>?sort=z">Sort by Z-A</a>
Run Code Online (Sandbox Code Playgroud)
或者,另一个例子:
<a href="<?=$url;?>?cat=1">Category 1</a>
<a href="<?=$url;?>?cat=2">Category 2</a>
Run Code Online (Sandbox Code Playgroud)
或者,另一个例子:
<a href="<?=$url;?>?page=1">1</a>
<a href="<?=$url;?>?page=2">2</a>
<a href="<?=$url;?>?page=3">3</a>
<a href="<?=$url;?>?page=4">4</a>
Run Code Online (Sandbox Code Playgroud)
基本上,我们需要一个函数来替换$_GETURL中的特定内容,这样我们就不会得到重复内容,例如:?page=2&page=3
话虽如此,它需要是智能的,所以它知道参数的开头是a ?还是a&
我们还需要它是聪明的,以便我们可以像这样拥有URL:
<a href="<?=$url;?>page=3">3</a> (without the ? - so it will detect automatically wether to use an `&` or a `?`
Run Code Online (Sandbox Code Playgroud)
我不介意为每个preg_replace为某些$ _GET参数创建不同的变量,但我正在寻找最佳方法.
谢谢.
这样的事怎么样?
function merge_querystring($url = null,$query = null,$recursive = false)
{
// $url = 'http://www.google.com.au?q=apple&type=keyword';
// $query = '?q=banana';
// if there's a URL missing or no query string, return
if($url == null)
return false;
if($query == null)
return $url;
// split the url into it's components
$url_components = parse_url($url);
// if we have the query string but no query on the original url
// just return the URL + query string
if(empty($url_components['query']))
return $url.'?'.ltrim($query,'?');
// turn the url's query string into an array
parse_str($url_components['query'],$original_query_string);
// turn the query string into an array
parse_str(parse_url($query,PHP_URL_QUERY),$merged_query_string);
// merge the query string
if($recursive == true)
$merged_result = array_merge_recursive($original_query_string,$merged_query_string);
else
$merged_result = array_merge($original_query_string,$merged_query_string);
// Find the original query string in the URL and replace it with the new one
return str_replace($url_components['query'],http_build_query($merged_result),$url);
}
Run Code Online (Sandbox Code Playgroud)
用法...
<a href="<?=merge_querystring($url,'?page=1');?>">Page 1</a>
<a href="<?=merge_querystring($url,'?page=2');?>">Page 2</a>
Run Code Online (Sandbox Code Playgroud)
好吧,我有同样的问题,找到了这个问题,最后,我更喜欢自己的方法.也许它有缺陷,那么请告诉我它们是什么.我的解决方案是:
$query=$_GET;
$query['YOUR_NAME']=$YOUR_VAL;
$url=$_SERVER['PHP_SELF']. '?' . http_build_query($query);
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你.
<?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);
}
?>
Run Code Online (Sandbox Code Playgroud)
像这样使用:
<?php
echo change_query($myUrl, array('queryKey'=>'queryValue'));
?>
Run Code Online (Sandbox Code Playgroud)
我今天早上这样做,似乎在所有情况下都有效。您可以使用数组更改/添加多个查询;)