Ответ 1
$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>
Привет, кто-нибудь может мне помочь с этим У меня есть URL-адрес, например
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
Я знаю, что $_SERVER [ "REQUEST_URI" ] продолжает получать текущий URL-адрес, поэтому я получаю этот результат. Я попробовал некоторые свойства $_SERVER [""]. Мне нравится изменять значение переменной d, любую идею, как это сделать. Любой ответ хорошо оценен. Спасибо!
$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>
Попробуйте использовать выражение ниже, оно должно работать
preg_replace("#&d=.*&#", '&d=newvalue&', $_SERVER['REQUEST_URI'])
modify_url_query($url, array('limit' => 50));
Моя функция для изменения запроса в URL
function modify_url_query($url, $mod){
$purl = parse_url($url);
$params = array();
if (($query_str=$purl['query']))
{
parse_str($query_str, $params);
foreach($params as $name => $value)
{
if (isset($mod[$name]))
{
$params[$name] = $mod[$name];
unset($mod[$name]);
}
}
}
$params = array_merge($params, $mod);
$ret = "";
if ($purl['scheme'])
{
$ret = $purl['scheme'] . "://";
}
if ($purl['host'])
{
$ret .= $purl['host'];
}
if ($purl['path'])
{
$ret .= $purl['path'];
}
if ($params)
{
$ret .= '?' . http_build_query($params);
}
if ($purl['fragment'])
{
$ret .= "#" . $purl['fragment'];
}
return $ret;
}
Чтобы удалить повторное добавление параметра запроса, сделайте следующее
// 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>
Здесь вы не позаботитесь о двойной котировке. Замените это следующим кодом и затем проверьте.
<a href="<?php echo 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'].'&d=test1';?>">LINK 1</a>
И также проверьте в firebug, что URL-адрес в href каждый раз.
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);