2012-06-09 28 views
4

在php中,我添加了一個額外的URL段?sort來按升序或降序對帖子進行排序。PHP不添加已經存在的url參數

<?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網址段重複。

例子:http://mysite.com/another_segment/?sort=asc?sort=asc?sort=asc

要禁止重複,我怎麼更換URL段每當我點擊兩個分揀環節之一?我不需要將參數與&符號分開。我期待只有一個分隔符。我在分頁腳本中使用它,因此當我瀏覽頁面時,參數需要保留在URL中。

我試圖避免的JavaScript以及

+0

,即'/ another_segment /:

$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 } ?> 

這樣你就可以有查詢字符串參數的URL,但只有一個sort=asc|desc?排序= asc'。這是說明性的:http://php.about.com/od/learnphp/qt/_SERVER_PHP.htm –

+0

@JaredFarrish - 這將解釋它是否重複兩次。但是3次? –

+0

@保羅 - 當然,爲什麼不呢?嘗試我的演示:http://jfcoder.com/test/url.php –

回答

3

您應該使用以下函數刪除現有URL中的「排序」鍵,然後追加。

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 } ?> 
+0

謝謝!我添加了函數和代碼,但由於某種原因它不能解決問題。 – CyberJunkie

+0

我的錯誤,它的工作原理,謝謝! – CyberJunkie

0

嘗試使用的$_SERVER['SCRIPT_NAME']代替REQUEST_URI

1

要從$_SERVER['REQUEST_URI']中去除查詢字符串,請使用$URI = strstr($_SERVER['REQUEST_URI'], "?", true);

Reference: php.net;

1
<?php 

$get_asc = $get_desc = $_GET; 
$get_asc['sort'] = 'asc'; 
$get_desc['sort'] = 'desc'; 

if(filter_var($url, FILTER_VALIDATE_URL)) { ?> 
    <a href="<?php echo $url . '?' . http_build_query($get_asc); ?>">Small</a> 
    <a href="<?php echo $url . '?' . http_build_query($get_desc); ?>">Large</a> 
<?php } ?> 
2

地帶的查詢字符串從$url和重建$_GET&追加。這可能是因爲什麼`$ _ SERVER [ 'REQUEST_URI']'包含

http://example.com/some/path?page=1&last=1500&sort=asc 
http://example.com/some/path?page=1&last=1500&sort=desc