Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php don';t添加已存在的url参数_Php_Url - Fatal编程技术网

Php don';t添加已存在的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)) { ?>

在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))
    { ?>         
      <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