2013-04-16 17 views
11

嗨任何人都可以帮我这个 我有一个像如何获得和更改URL变量PHP

parent/child/a=1&b=2$c=3 

那么我会添加变量到URL

<a href="<?php echo $_SERVER["REQUEST_URI"]."&d=test1";?>">LINK 1</a> 
<a href="<?php echo $_SERVER["REQUEST_URI"]."&d=test2";?>">LINK 2</a> 

一个链接网址每次点击我的链接变量d到URL不断重现像这样

parent/child/a=1&b=2&c=3&d=test2&d=test2&d=test2&d=test1&d=test1 

我知道t那么$ _SERVER [“REQUEST_URI”]会继续获取当前的URL,这就是我得到该结果的原因。我已经尝试了$ _SERVER [“”]的一些属性。 我喜欢的是改变d变量值,任何想法如何去做。 任何回应非常感谢。谢谢!

+1

使用的preg_replace [“REQUEST_URI”]如果d =存在 – Robert

+0

@Robert Podwika.I认为preg_replace函数会做,但我不知道如何使用这些代码,现在我将研究在PHP手册。谢谢。如果代码解决了我的问题,我会打+1。谢谢罗伯特! – CaffeineShots

+0

@kodewrecker:你看看我的答案吗?它应该工作 –

回答

28
$query = $_GET; 
// replace parameter(s) 
$query['d'] = 'new_value'; 
// rebuild url 
$query_result = http_build_query($query); 
// new link 
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?<?php echo $query_result; ?>">Link</a> 
+0

这是一个更好的答案,我正在寻找这样的东西。谢谢。 – Overcode

+0

迄今为止我见过的最优雅的解决方案发布了几个类似的问题 – Brad

0

这里你没有照顾双引号。用下面的代码代替,然后检查。

<a href="<?php echo 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'].'&d=test1';?>">LINK 1</a> 

而且还检查萤火虫每次在href中的网址。

+0

我不认为这会有什么区别? –

+0

@ OSSCube.I试过了,在我的最后,双引号和单引号都做得很好,但是我改变它只是为了测试你的,仍然再现变量d先生,但是无论如何感谢你的回复。 – CaffeineShots

+0

@ kodewrecker我已更新我的代码。现在检查。 –

1

要删除重复添加查询参数做以下

// parse the url 
$pathInfo = parse_url($_SERVER['REQUEST_URI']); 
$queryString = $pathInfo['query']; 
// convert the query parameters to an array 
$queryArray = parse_str($queryString); 
// add the new query parameter into the array 
$queryArray['d'] = 1; 
// build the new query string 
$newQueryStr = http_build_query($data); 

// construct new url 
?> 
<a href="<?php echo $pathInfo.'?'.$newQueryStr;?>">LINK 1</a> 
+0

谢谢你。 $ data的值是多少? – CaffeineShots

+0

@CaffeineShots它应该是parse_str($ queryString,$ queryArray);而不是$ queryArray = parse_str($ queryString);然后$ data是$ queryArray – DoubleK

4

与以下表达式尝试,它应该工作

preg_replace("#&d=.*&#", '&d=newvalue&', $_SERVER['REQUEST_URI']) 
+0

是的,我正在测试它。第一个参数是什么? “#&d =。*&#”是数字符号(#),星号(*)是必须的?我可以问这是什么吗? – CaffeineShots

+0

这些是表达式语法。 '&d =。*&'这是我们想要的东西。它将取代内容&d = *&与你给第二参数。我已经更新了代码,请用新代码重新检查一遍。 –

+0

谢谢!有用! +1 – CaffeineShots

2
modify_url_query($url, array('limit' => 50)); 

我的功能在URL修改查询

在$ _ SERVER 0
+0

它工作但得到未定义的错误,如何解决这个问题? –

0
function replaceUrlParameters($url = '', $newParams = array()){ 
    if($url){ 
     $urlArray = parse_url($url); 
     $queryString = $urlArray['query']; 
     parse_str($queryString, $queryParams); 
     $queryParams = array_merge($queryParams, $newParams); 
     $urlArray['query'] = http_build_query($queryParams); 

     if(!empty($urlArray)){ 
      $url = $urlArray['scheme'].'://'.$urlArray['host'].$urlArray['path'].'?'.$urlArray['query']; 
     } 
    } 
    return $url; 
} 
// $newParams = array of new parameters or old parameters with new value 
$replacedUrl = replaceUrlParameters($url, $newParams); 
+0

请考虑解释此代码段的作用,以及如何使用它。这是如何解决原始问题中的问题的? –

+0

假设你有这样的网址: - '<?php echo $ _SERVER [“REQUEST_URI”]。“&a = test1&b = test2”;?>' 您想将参数_b_的值替换为_test3_,以及具有相同索引和新值的数组。 for ex- '<?$ url = $ _SERVER [“REQUEST_URI”]。“&a = test1&b = test2”;?>' '<?newParams = ['b'=>'test3']?>' 那么你会得到 - '<? $ _SERVER [ “REQUEST_URI”] “&一个= TEST1&B = TEST3”。?>' –