2012-07-26 74 views
0

我有一個URL,我想要替換值,如果他們在那裏,但添加,如果他們不是。用新值替換查詢字符串中的值PHP

我的網址是例如:http://www.example.com/online/admin/users?p=Name&sort=user&dir=desc,我想編寫一個腳本,如果它已經存在或將其添加,則會再次寫出URL中的查詢。我想把它寫一個「一」的標籤,但有不同的價值我選擇排序和DIR

我發現在一個叫網站一些代碼Add Querystring Variable

function add_querystring_var($url, $key, $value) { 
    $url = preg_replace('/(.*)(?|&)' . $key . '=[^&]+?(&)(.*)/i', '$1$2$4', $url . '&'); 
    $url = substr($url, 0, -1); 
    if (strpos($url, '?') === false) { 
     return ($url . '?' . $key . '=' . $value); 
    } else { 
     return ($url . '&' . $key . '=' . $value); 
    } 
} 

我唯一的問題是我不知道如何使用它來做我想要的。

這是我走到這一步,去用它

add_querystring_var("http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'],"sort","lvl"); 
add_querystring_var("http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'],"dir","asc"); 

代碼,但我不知道從這裏作爲做的不是爲我寫任何東西了。

我知道它會很簡單,但我是這個PHP領域的新手。 :d

編輯

代碼到目前爲止

$url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 
function add_querystring_var($url, $key, $value) { 
    $urlarray = parse_url($url); 
    parse_str($urlarray['query'],$queryarray); 
    $queryarray[$key]=$value; 
    $queryarray = http_build_query($queryarray); 
    return http_build_url($url,array('query'=>$queryarray),HTTP_URL_JOIN_QUERY); 
} 
$url_id=add_querystring_var($url,"sort","lvl"); 
$url_id=add_querystring_var($url,"dir",$dir); 

<?php echo '<a href="'.$url.'">New Anchor</a>'; ?> 

但這回空白。還有什麼想法?感謝所有迄今爲止輸入的球員。

回答

0

我會建議使用parse_urlparse_str

function add_querystring_var($url, $key, $value) { 
    $urlarray = explode('?',$url); 
    $query = ''; 
    if(isset($urlarray[1])) 
     $query = $urlarray[1]; 
    parse_str($query,$queryarray); 
    $queryarray[$key]=$value; 
    $queryarray = http_build_query($queryarray); 

    return $urlarray[0].'?'.$queryarray; 
} 

呼叫這樣

add_querystring_var("http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'],'sort','id'); 

或您的具體情況

<?php 
$url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 
$url=add_querystring_var($url,"sort","lvl"); 
$url=add_querystring_var($url,"dir", $dir); 
echo '<a href="'.$url.'">New Anchor</a>'; 
?> 

測試

+1

需要被'parse_str($ urlarray [「查詢」],$ queryarray)'。 – deceze 2012-07-26 09:31:01

+0

你是對的...糾正。 – FatalError 2012-07-26 09:33:53

+0

應該指出'http_build_url'是一個PECL擴展。 – deceze 2012-07-26 09:36:36

0

使用的是什麼你這麼遠,你可能需要修改它像一個小這樣:

$url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 
//your add_querystring_var() returns the new url, it doesn't echo it to the screen 
$url=add_querystring_var($url,"sort","lvl"); 
$url=add_querystring_var($url,"dir","asc"); 

echo '<a href="'.$url.'">New Anchor</a>'; 
+0

嗯。請參閱我的編輯 – dpDesignz 2012-07-26 09:56:56