Как заменить знаки плюс (+) пробелами () в параметрах GET с помощью JavaScript

Я перенаправляю пользователей на мой сайт с параметрами GET, например: www.example.com/?email=mail@mail.com&vorname=name1+name2

Я использую javascript для заполнения своих полей (подписка на рассылку) следующим образом:

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;

Таким образом, он работает правильно, но параметр "vornametxt" содержит знаки плюс, если их содержит параметр GET. Я хочу заменить знаки плюса в именах пробелами, которые должны работать следующим образом:

vornametxt = vornametxt.replace(/\+/g, " ");

Это то, что я нашел в старых вопросах о переполнении стека, но это не работает. Что я делаю неправильно? Возможно ли, что мой сайт WordPress не позволяет определенный код?

Я использую Wordpress и плагин, который позволяет мне добавить этот код JavaScript в нижний колонтитул моих сайтов.

1 ответ

Решение

Эти значения кодируются 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">

Другие вопросы по тегам