gpt4 book ai didi

php - 替换给定 url 中的查询字符串值的更好方法

转载 作者:可可西里 更新时间:2023-11-01 12:41:53 27 4
gpt4 key购买 nike

好吧..所以基本上,假设我们有一个链接:

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

基本上,我需要创建一个函数来替换 URL 中的每个内容,例如:

<a href="<?=$url;?>?sort=a">Sort by A-Z</a>
<a href="<?=$url;?>?sort=z">Sort by Z-A</a>

或者,再举一个例子:

<a href="<?=$url;?>?cat=1">Category 1</a>
<a href="<?=$url;?>?cat=2">Category 2</a>

或者,另一个例子:

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

所以基本上,我们需要一个函数来替换 URL 中的特定 $_GET,这样我们就不会得到重复的,例如:?page=2&page=3

话虽如此,它需要很聪明,所以它知道参数的开头是 ? 还是 &

我们还需要它是智能的,这样我们就可以拥有这样的 URL:

<a href="<?=$url;?>page=3">3</a> (without the ? - so it will detect automatically wether to use an `&` or a `?`

我不介意为某些 $_GET 参数为每​​个 preg_replace 创建不同的变量,但我正在寻找执行此操作的最佳方法。

谢谢。

最佳答案

这样的事情怎么样?

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);
}

用法...

<a href="<?=merge_querystring($url,'?page=1');?>">Page 1</a>
<a href="<?=merge_querystring($url,'?page=2');?>">Page 2</a>

关于php - 替换给定 url 中的查询字符串值的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7356555/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com