2017-06-06 50 views
0

假設這是我目前的網址:如何實現添加/編輯參數機制?

http://example.com/search?param1=foo&param2=bar 

現在我想補充param3=baz。所以這是代碼:

<a href="?param3=baz" >add param3</a> 
//=> http://example.com/search?param3=baz 

請參閱? param1param2將被刪除。所以我必須這樣處理:

<?php 
    $query_str = parse_url($url, PHP_URL_QUERY); 
    parse_str($query_str, $query_params); 
    $query_params = $query_params == '' ? '?' : $query_params . '&'; 
?> 

<a href="?{$query_params}param3=baz" >add param3</a> 

看起來醜陋,但好吧,從來沒有。現在如果參數已經存在,我需要編輯它會發生什麼?假設這個例子:

http://example.com/search?param1=foo&param2=bar 

現在,我怎麼讓這些編輯的parame2值的鏈接? (加上保留其他參數)

+0

你是怎麼知道這次我想編輯已經存在的,這一次我想添加新的?意味着幾乎不可能找出心情 –

+0

@stack ..... http_build_query()使用... for ref:https://stackoverflow.com/questions/5809774/manipulate-a-url-string-by-adding-get-parameters –

回答

0

沒有辦法編寫相對URI來保留現有的查詢字符串,同時向其中添加其他參數。

你必須再做:

search?param1=foo&param=bar&param3=baz 

或者

使用JavaScript可能

How to add a parameter to the URL?

function currentUrl() { 
    $protocol = strpos(strtolower($_SERVER['SERVER_PROTOCOL']),'https') === FALSE ? 'http' : 'https'; 
    $host  = $_SERVER['HTTP_HOST']; 
    $script = $_SERVER['SCRIPT_NAME']; 
    $params = $_SERVER['QUERY_STRING']; 

    return $protocol . '://' . $host . $script . '?' . $params; 
} 

然後用類似的東西加上你的值;

echo currentUrl().'&param3=baz'; 

無論讓你不得不將仍然存在的參數,如果param3是 參數將覆蓋之前,否則將被列入 底。

http_build_query(array_merge($_GET, array("param3"=>"baz"))) 
0

您可以使用功能http_build_query產生新的查詢,例如:

$url = 'http://example.com/search?param1=foo&param2=bar'; 

$query_str = parse_url($url, PHP_URL_QUERY); 
parse_str($query_str, $params); 

$data = [ 
    'param3' => 'baz' 
]; 

$params = array_merge($params, $data); 

echo http_build_query($params) . "\n"; 

輸出將是:

param1=foo&param2=bar&param3=baz 

我用array_merge佔優存在PARAMS,如果我們得到url:

$url = 'http://example.com/search?param1=foo&param3=bar'; 

相同的代碼輸出將是:

param1=foo&param3=baz 

我們覆蓋存在PARAM和保存舊PARAMS。