我使用以下GET参数将用户重定向到我的网站: www.example.com/?email=mail@mail.com&vorname=name1+name2
我使用javascript这样填充我的texfields(通讯订阅):
function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
vars[key] = value;
});
return vars;
}
function getUrlParam(parameter, defaultvalue){
var urlparameter = defaultvalue;
if(window.location.href.indexOf(parameter) > -1){
urlparameter = getUrlVars()[parameter];
}
return urlparameter;
}
var vornametxt = getUrlParam('vorname','');
var emailtxt = getUrlParam('email','');
document.querySelector("input[name=nn]").value = vornametxt;
document.querySelector("input[name=ne]").value = emailtxt;
就像这样,它可以正常工作,但是如果GET参数包含加号,则参数“ vornametxt”包含加号。我想用这样的空格替换名称中的加号:
vornametxt = vornametxt.replace(/\+/g, " ");
这是我在较早的关于堆栈溢出的问题中发现的,但是它不起作用。 我究竟做错了什么?我的wordpress网站是否可能不允许某些代码?
我正在使用Wordpress和一个插件,该插件可以让我将此javascript代码添加到我的网站页脚中。
答案 0 :(得分:2)
这些值使用URI编码,其中+
表示“空格”。要对其进行解码,请用空格替换+
,然后使用decodeURIComponent
(以处理已编码的任何其他字符)。我认为它将在您的getUrlParam
函数中,就在结尾处:
return decodeURIComponent(urlparameter.replace(/\+/g, " "));
实时示例:
(function() {
var window = {
location: {
href: "http://www.example.com/&email=mail@mail.com&vorname=name1+name2"
}
};
function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m, key, value) {
vars[key] = value;
});
return vars;
}
function getUrlParam(parameter, defaultvalue){
var urlparameter = defaultvalue;
if (window.location.href.indexOf(parameter) > -1) {
urlparameter = getUrlVars()[parameter];
}
return decodeURIComponent(urlparameter.replace(/\+/g, " "));
}
var vornametxt = getUrlParam('vorname','');
var emailtxt = getUrlParam('email','');
document.querySelector("input[name=nn]").value = vornametxt;
document.querySelector("input[name=ne]").value = emailtxt;
})();
<input type="text" name="nn">
<br><input type="text" name="ne">