添加URL的/更改参数,并重定向到新网址(Add / Change parameter of URL

2019-06-18 15:35发布

如果&view-all参数不会在URL中存在我需要将它与值一起添加到URL的结尾。 如果它确实存在,然后我需要能够只需更改值而无需创建一个新的URL,因为它可能会,也可能不会,之前有其他的参数。

我发现这个功能,但我不能得到它的工作: https://stackoverflow.com/a/10997390/837705

这是我一直在使用上面的函数(我不能去工作)代码: http://jsfiddle.net/Draven/tTPYL/4/

我知道如何在参数和值已追加:

<div onclick="javascript: window.location.assign(window.location.href+='&view-all=Yes');">Blah Blah</div>

更多信息:

如果URL是http://www.domain.com/index.php?action=my_action那么默认的“&视图所有”值将是“是”,所以他们URL将被定向到当他们点击该按钮是http://www.domain.com/index.php?action=my_action&view-all=Yes

如果URL是http://www.domain.com/index.php?action=my_action&view-all=Yes然后当他们单击该按钮会变为http://www.domain.com/index.php?action=my_action&view-all=No​​​

编辑:请给我的例子。 我不知道JS的很多,我只是不能想办法做到这一点在PHP。

Answer 1:

function setGetParameter(paramName, paramValue)
{
    var url = window.location.href;
    var hash = location.hash;
    url = url.replace(hash, '');
    if (url.indexOf(paramName + "=") >= 0)
    {
        var prefix = url.substring(0, url.indexOf(paramName));
        var suffix = url.substring(url.indexOf(paramName));
        suffix = suffix.substring(suffix.indexOf("=") + 1);
        suffix = (suffix.indexOf("&") >= 0) ? suffix.substring(suffix.indexOf("&")) : "";
        url = prefix + paramName + "=" + paramValue + suffix;
    }
    else
    {
    if (url.indexOf("?") < 0)
        url += "?" + paramName + "=" + paramValue;
    else
        url += "&" + paramName + "=" + paramValue;
    }
    window.location.href = url + hash;
}

调用函数上面的onclick事件。



Answer 2:

所有preivous解决方案并不需要在参数中的子账户posibility。 例如HTTP:// XYZ CA = 1&一个= 2不会选择参数,但大约 下面是功能,经过参数并检查它们。

function setGetParameter(paramName, paramValue)
{
  var url = window.location.href;
  var hash = location.hash;
  url = url.replace(hash, '');
  if (url.indexOf("?") >= 0)
  {
    var params = url.substring(url.indexOf("?") + 1).split("&");
    var paramFound = false;
    params.forEach(function(param, index) {
      var p = param.split("=");
      if (p[0] == paramName) {
        params[index] = paramName + "=" + paramValue;
        paramFound = true;
      } 
    });
    if (!paramFound) params.push(paramName + "=" + paramValue);
    url = url.substring(0, url.indexOf("?")+1) + params.join("&");
  }
  else
    url += "?" + paramName + "=" + paramValue;
  window.location.href = url + hash;
}


Answer 3:

我也有类似的情况,我想更换一个URL查询参数。 不过,我只用了一个PARAM,我可以简单地替换它:

window.location.search = '?filter=' + my_filter_value

location.search属性可以让你获取或设置一个URL的查询部分。



Answer 4:

虽然我把网址从输入,很容易调整到真实的URL。

var value = 0;

$('#check').click(function()
{
    var originalURL = $('#test').val();
    var exists = originalURL.indexOf('&view-all');

    if(exists === -1)
    {
        $('#test').val(originalURL + '&view-all=value' + value++);
    }
    else
    {
        $('#test').val(originalURL.substr(0, exists + 15) + value++);
    }
});

http://jsfiddle.net/8YPh9/31/



Answer 5:

要做到这一点在PHP中:你有几个参数来查看您的网页,可以说actionview-all 。 你会(可能)已经与访问这些$action = $_GET['action']或什么的,也许设置默认值。

然后,您决定取决于如果你想SWICH就像一个变量$viewAll = $viewAll == 'Yes' ? 'No' : 'Yes' $viewAll = $viewAll == 'Yes' ? 'No' : 'Yes'

而在最后,你又把喜欢建立与这些值的网址

$clickUrl = $_SERVER['PHP_SELF'] . '?action=' . $action . '&view-all=' . $viewAll;

和多数民众赞成它。

所以你依赖于页面的状态,而不是用户的URL(因为也许稍后决定$ viewAll是是默认或其他)。



Answer 6:

一些简单的想法,让你去:

在PHP中,你可以做这样的:

if (!array_key_exists(explode('=', explode('&', $_GET))) {
  /* add the view-all bit here */
}

在javascript:

if(!location.search.match(/view\-all=/)) {
  location.href = location.href + '&view-all=Yes';
}


Answer 7:

Here's a way of accomplishing this. It takes the param name and param value, and an optional 'clear'. If you supply clear=true, it will remove all other params and just leave the newly added one - in other cases, it will either replace the original with the new, or add it if it's not present in the querystring.

This is modified from the original top answer as that one broke if it replaced anything but the last value. This will work for any value, and preserve the existing order.

function setGetParameter(paramName, paramValue, clear)
{
clear = typeof clear !== 'undefined' ? clear : false;
var url = window.location.href;
var queryString = location.search.substring(1); 
var newQueryString = "";
if (clear)
{
    newQueryString = paramName + "=" + paramValue;
}
else if (url.indexOf(paramName + "=") >= 0)
{
    var decode = function (s) { return decodeURIComponent(s.replace(/\+/g, " ")); };
    var keyValues = queryString.split('&'); 
    for(var i in keyValues) { 
        var key = keyValues[i].split('=');
        if (key.length > 1) {
            if(newQueryString.length > 0) {newQueryString += "&";}
            if(decode(key[0]) == paramName)
            {
                newQueryString += key[0] + "=" + encodeURIComponent(paramValue);;
            }
            else
            {
                newQueryString += key[0] + "=" + key[1];
            }
        }
    } 
}
else
{
    if (url.indexOf("?") < 0)
        newQueryString = "?" + paramName + "=" + paramValue;
    else
        newQueryString = queryString + "&" + paramName + "=" + paramValue;
}
window.location.href = window.location.href.split('?')[0] + "?" + newQueryString;
}


Answer 8:

我觉得像这样的工作,提升@Marc代码:

//view-all parameter does NOT exist  
$params = $_GET;  
if(!isset($_GET['view-all'])){  
  //Adding view-all parameter  
  $params['view-all'] = 'Yes';  
}  
else{  
  //view-all parameter does exist!  
  $params['view-all'] = ($params['view-all'] == 'Yes' ? 'No' : 'Yes');  
}
$new_url = $_SERVER['PHP_SELF'].'?'.http_build_query($params);


Answer 9:

我建议一点点变化@拉约什的回答......在我的具体情况我可能有一个哈希作为URL,这将导致问题的解析,我们正在与重定向后,这种方法插入参数的一部分。

function setGetParameter(paramName, paramValue) {
    var url = window.location.href.replace(window.location.hash, '');
    if (url.indexOf(paramName + "=") >= 0) {
        var prefix = url.substring(0, url.indexOf(paramName));
        var suffix = url.substring(url.indexOf(paramName));
        suffix = suffix.substring(suffix.indexOf("=") + 1);
        suffix = (suffix.indexOf("&") >= 0) ? suffix.substring(suffix.indexOf("&")) : "";
        url = prefix + paramName + "=" + paramValue + suffix;
    }else {
        if (url.indexOf("?") < 0)
            url += "?" + paramName + "=" + paramValue;
        else
            url += "&" + paramName + "=" + paramValue;
    }
    url += window.location.hash;
    window.location.href = url;
}


Answer 10:

这是我的示例代码重建URL查询字符串与JS

 //function get current parameters $.urlParam = function(name){ var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href); if (results==null){ return null; } else{ return results[1] || 0; } }; //build a new parameters var param1 = $.urlParam('param1'); var param2 = $.urlParam('param2'); //check and create an array to save parameters var params = {}; if (param1 != null) { params['param1'] = param1; } if (order != null) { params['param2'] = param2; } //build a new url with new parameters using jQuery param window.location.href = window.location.origin + window.location.pathname + '?' + $.param(params); 

我用JQUERY PARAM: http://api.jquery.com/jquery.param/创建具有新的参数一个新的URL。



Answer 11:

我需要帮助来调整我下面的脚本,或者发现可能对我的WordPress网站被用来从正向URL抓取URL后缀的参数,然后在按钮点击网址追踪正确的转发广告ID添加脚本。

原因:参数用于广告跟踪,找出从广告的用户一直前行,即使用户通过点击按钮从选择启用页面的销售页面跳。

这里的目标达到:1. FB广告指向具有跟踪代码的选择启用页: https://ownsite.com/optin-page/?tid=fbad1 2.在选择启用页有一个设置按钮URL转发的销售页面,但如果点击则只有URL是前锋,但参数“?TID = fbad1”丢失。 3.下自动转发脚本(正常工作),可用于对按钮的点击着改变,但它只是抢“TID”参数而不是也UTM参数的限制。

因此,一个脚本代码应实施建立点击按钮(也以他们的风格,或者使用图片代替),并同时点击按钮转发到不同的销售页面,抓住后缀参数形成当前选择启用页转发再到销售 - 页面https://ownsite.com/sales-page/?tid=fbad1还包括UTM参数

目前,我可以通过使用autoredirect脚本解决了这个,但A.),我不希望在这个页面使用的autoredirect。 更好的是用来让自己单击用户转发与提供的网址参数的事件点击按钮。 B.)在该脚本的跟踪ID参数仅限于“TID = ...?”,而不是我也想从当前页面跟踪按钮点击也即抓住UTM代码URL的paramater https://开头WWW。 optin-page.com/?tid=facebookad1?utm_campaign=blogpost然后按一下按钮抢参数,并添加到按钮组URL https://www.sales-page.com/?tid=facebookad1?utm_campaign=blogpost

现在请在这里找到下面的代码使用了自动重定向,并抢得的URL参数。 此代码应改变现在能够创建一个点击事件的按钮被然后重定向到当前URL的参数抓住了前进的URL,如果点击按钮(如上所述)。

    <p><!-- Modify this according to your requirement - core script from https://gist.github.com/Joel-James/62d98e8cb3a1b6b05102 and suffix grabbing </p>
    <h3 style="text-align: center;"><span style="color: #ffffff; background-color: #039e00;">►Auto-redirecting after <span id="countdown">35</span> seconds◄</span></h3>
    <p><!-- JavaScript part --><br /><script type="text/javascript">

function findGetParameter(parameterName) {
    var result = null,
        tmp = [];
    location.search
        .substr(1)
        .split("&")
        .forEach(function (item) {
          tmp = item.split("=");
          if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]);
        });
    return result;
}


    // Total seconds to wait
    var seconds = 45;

    function countdown() {
        seconds = seconds - 1;
        if (seconds < 0) {
            // Chnage your redirection link here
var tid = findGetParameter('tid');
window.location = "https://www.2share.info/ql-cb2/" + '?tid='+tid;
        } else {
            // Update remaining seconds
            document.getElementById("countdown").innerHTML = seconds;
            // Count down using javascript
            window.setTimeout("countdown()", 1000);
        }
    }

    // Run countdown function
    countdown();

</script></p>


Answer 12:

var updateQueryStringParameter = function (key, value) {

    var baseUrl = [location.protocol, '//', location.host, location.pathname].join(''),
        urlQueryString = document.location.search,
        newParam = key + '=' + value,
        params = '?' + newParam;

    // If the "search" string exists, then build params from it
    if (urlQueryString) {
        var updateRegex = new RegExp('([\?&])' + key + '[^&]*');
        var removeRegex = new RegExp('([\?&])' + key + '=[^&;]+[&;]?');

        if( typeof value == 'undefined' || value == null || value == '' ) { 
            params = urlQueryString.replace(removeRegex, "$1");
            params = params.replace( /[&;]$/, "" );

        } else if (urlQueryString.match(updateRegex) !== null) { 
            params = urlQueryString.replace(updateRegex, "$1" + newParam);

        } else {
            params = urlQueryString + '&' + newParam;
        }
    }

    // no parameter was set so we don't need the question mark
    params = params == '?' ? '' : params;

    window.history.replaceState({}, "", baseUrl + params);
};


Answer 13:

为什么不自己分析查询字符串时,你可以让浏览器为你做?

function changeQS(key, value) {
    let urlParams = new URLSearchParams(location.search.substr(1));
    urlParams.set(key, value);
    location.search = urlParams.toString();
}


文章来源: Add / Change parameter of URL and redirect to the new URL