添加/更改URL的参数并重定向到新URL

如果URL中不存在&view-all参数,我需要将其与值一起添加到URL的末尾。 如果它存在,那么我需要能够在不创建新URL的情况下更改值,因为它可能会或可能不会在其之前有其他参数。

我找到了这个function,但我无法让它工作: https : //stackoverflow.com/a/10997390/837705

这是我使用上面的函数的代码(我无法工作): http : //jsfiddle.net/Draven/tTPYL/4/

我知道如何附加参数和值:

Blah Blah

更多信息:

如果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

如果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做的方法。

 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事件中调用上面的函数。

所有临时解决方案都没有考虑参数中子字符串的可能性。 例如, http:// xyz?ca = 1&a = 2不会选择参数a而是选择ca. 这是通过参数并检查它们的函数。

 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; } 

虽然我从输入中获取url,但它很容易调整到真正的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/

我有类似的情况,我想替换URL查询参数。 但是,我只有一个参数,我可以简单地替换它:

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

location.search属性允许您获取或设置URL的查询部分。

要在PHP中执行此操作:您需要使用几个参数来查看页面,然后说出actionview-all 。 您可能(可能)已经使用$action = $_GET['action']或其他任何方式访问这些,可能会设置默认值。

然后根据这个决定你是否想要改变像$viewAll = $viewAll == 'Yes' ? 'No' : 'Yes'这样的变量$viewAll = $viewAll == 'Yes' ? 'No' : 'Yes' $viewAll = $viewAll == 'Yes' ? 'No' : 'Yes'

最后,您只需再次使用这些值构建URL

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

就是这样。

因此,您依赖于页面状态而不是用户URL(因为您可能稍后决定$ viewAll是默认值或其他)。

这是实现这一目标的一种方式。 它采用参数名称和参数值,以及可选的“清除”。 如果你提供clear = true,它将删除所有其他参数并且只保留新添加的参数 – 在其他情况下,它将用新的替换原始,或者如果查询字符串中不存在则添加它。

这是从原始的最高答案修改,因为如果它替换了除最后一个值以外的任何东西,那么它就会破坏 这适用于任何值,并保留现有订单。

 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; } 

我认为像这样的东西会起作用,升级@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); 

我建议对@ Lajos的答案稍作修改……在我的特殊情况下,我可能会将一个哈希作为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; } 

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

在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'; } 

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

 //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); 

我需要帮助来调整下面的脚本或者找到一个可以在我的wordpress网站上使用的脚本来从转发url中获取url后缀参数,然后在按钮点击url上添加以跟踪正确的转发广告ID。

原因:参数用于广告跟踪,以找出用户转发的广告,即使用户使用按钮点击从optin页面跳转到销售页面。

这里的目标是:1。FB广告指向带有跟踪代码的optin页面: https ://ownsite.com/optin-page/?tid = fbad1 2.在optin页面上有一个带设置的按钮转发到销售页面的URL,但如果单击,则只有URL转发,但缺少参数“?tid = fbad1”。 3.下面的自动转发脚本(工作正常)可用于更改按钮点击转发,但有一个限制,因为它只获取“tid”参数而不是utm参数。

因此,应实现脚本代码以建立点击按钮(也用于设置样式或使用图像),同时单击按钮以转发到不同的销售页面,同时从当前的optin页面获取后缀参数,然后转发给销售人员 – 页面https://ownsite.com/sales-page/?tid=fbad1还包括UTM参数

目前,我可以通过使用自动重定向脚本解决这个问题,但是A.)我不想在此页面使用autoredirect。 更好的是一个事件点击按钮,用于让用户自己单击以包含URL参数。 B.)此脚本中的跟踪ID参数仅限于“?tid = …”,而我还希望在按钮点击时跟踪UTM代码,即从当前页面抓取URL https:// www的参数。然后在按钮上单击抓取参数并添加到按钮集URL https://www.sales-page.com/?tid=facebookad1?utm_campaign=blogpost

现在请在此处找到用于自动重定向和获取URL参数的以下代码。 现在应该更改此代码,以便能够创建一个按钮,其中点击事件将被重定向,然后转到前向URL,如果单击该按钮,则参数抓取当前URL(如上所述)。