Php don';t添加已存在的url参数
在php中,我添加了一个额外的URL段Php don';t添加已存在的url参数,php,url,Php,Url,在php中,我添加了一个额外的URL段?sort,通过升序或降序对帖子进行排序 <?php //get current URL $url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; //filter URL and create sorting links if(filter_var($url, FILTER_VALIDATE_URL)) { ?>
?sort
,通过升序或降序对帖子进行排序
<?php
//get current URL
$url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
//filter URL and create sorting links
if(filter_var($url, FILTER_VALIDATE_URL))
{ ?>
<a href="<?php echo $url; ?>?sort=asc">Small</a>
<a href="<?php echo $url; ?>?sort=desc">Large</a>
<?php } ?>
问题是:每次单击链接时,url段都会在url中重复
示例:http://mysite.com/another_segment/?sort=asc?sort=asc?sort=asc
为了不允许重复,我如何在每次单击两个排序链接之一时替换URL段?我不需要用和符号分隔参数。我只需要一个分隔符。我在分页脚本中使用它,所以当我浏览页面时,参数需要保留在URL中
我也试图避免使用javascript尝试使用$\u服务器['SCRIPT\u NAME']
而不是请求\u URI
要从$\u服务器['REQUEST\u URI']
中删除查询字符串,请使用$URI=strstr($\u服务器['REQUEST\u URI'],“?”,true)代码>
) 您应该使用以下函数删除现有URL中的“sort”键,然后追加
function remove_querystring_var($url, $key) {
$url = preg_replace('/(.*)(?|&)' . $key . '=[^&]+?(&)(.*)/i', '$1$2$4', $url . '&');
$url = substr($url, 0, -1);
return $url;
}
您的代码应该以这种方式进行修改
<?php
//get current URL
$url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$url = remove_querystring_var($url, "sort");
//filter URL and create sorting links
if(filter_var($url, FILTER_VALIDATE_URL))
{ ?>
<a href="<?php echo $url; ?>?sort=asc">Small</a>
<a href="<?php echo $url; ?>?sort=desc">Large</a>
<?php } ?>
从$url
中删除查询字符串,然后重新生成$\u GET
,并附加&
$url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
// Strip the query string from URL
list($url,) = explode('?', $url);
// Remove 'sort' from querystring if exist
if (isset($_GET['sort']))
unset($_GET['sort']);
// Rebuild query string, append with '&'
$url .= '?'. http_build_query($_GET).(count($_GET) ? '&' : '');
if (filter_var($url, FILTER_VALIDATE_URL))
{ ?>
<a href="<?php echo $url; ?>sort=asc">Small</a>
<a href="<?php echo $url; ?>sort=desc">Large</a>
<?php } ?>
这可能是因为$\u服务器['REQUEST\u URI']
包含的内容,即/other\u segment/?sort=asc
。这是说明性的:@JaredFarrish——如果它重复两次,这就可以解释了。“但是三次?”保罗-当然,为什么不呢?试试我的演示:@JaredFarrish它在点击3次CyberJunkie时重复3次-我不确定你的评论是什么意思,但这就是我想要复制你的问题的原因(我想…?)。再试一次(),我添加了一个源代码视图。这几乎是你的代码。谢谢!我添加了函数和代码,但由于某些原因,它无法解决问题。
$url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
// Strip the query string from URL
list($url,) = explode('?', $url);
// Remove 'sort' from querystring if exist
if (isset($_GET['sort']))
unset($_GET['sort']);
// Rebuild query string, append with '&'
$url .= '?'. http_build_query($_GET).(count($_GET) ? '&' : '');
if (filter_var($url, FILTER_VALIDATE_URL))
{ ?>
<a href="<?php echo $url; ?>sort=asc">Small</a>
<a href="<?php echo $url; ?>sort=desc">Large</a>
<?php } ?>
http://example.com/some/path?page=1&last=1500&sort=asc
http://example.com/some/path?page=1&last=1500&sort=desc