Почему параметр URL, который я хочу получить, отображается не полностью? - PullRequest
6 голосов
/ 22 мая 2019

Я отслеживаю URL с "posName" параметрами, такими как:

example.com? PosName = Содержание + & + Community + Менеджер + (H / F)

Но мой код возвращает «Содержимое» только:

function () {
    var uri = document.location.href;
    var uri_dec = decodeURIComponent(uri);
    var url = new URL(uri_dec);
    var posName= url.searchParams.get("posName");
    return posName;
}

Как я могу получить полный параметр?

EDIT: У меня есть другой URL, например:

exemple.com? PosName = клуб + & + Аниматор + (Н / Р) * +1021 ** +1022 * И код возвращает полный параметр ... Так это длина параметра, который вызывает эту проблему?

Ответы [ 2 ]

4 голосов
/ 22 мая 2019

Я изменил вашу функцию, чтобы принимать URI в качестве аргумента. Вам необходимо закодировать параметр перед добавлением его в строку запроса (мы не можем увидеть этот код здесь). Компонент decodeURICIC в вашей функции также не требуется.

function getPosName (URI) {
    //var uri_dec = decodeURIComponent(uri);
    var url = new URL(URI);
    var posName = url.searchParams.get("posName");
  return posName;
}

console.log("Using your current URI:", getPosName("http://exemple.com?posName=Content+&+Community+Manager+(H/F)"))

const encodedParam = encodeURIComponent("Content & Community Manager (H/F)")
console.log("Encoded Parameter:", encodedParam)
const wellFormedURI = `http://exemple.com?posName=${encodedParam}`
console.log("Well Formed URI:", wellFormedURI)
console.log("Using well formed URI:", getPosName(wellFormedURI))
1 голос
/ 22 мая 2019

Если по какой-то причине у вас нет контроля над тем, что находится в window.location.href, вы можете легко решить эту проблему с помощью регулярных выражений:

function getPosName(uri) {
    let match = uri.match(/(?<=posName=)(.+?)(?=\&\w+?\=|$)/); 
    return match[1]; 
}

console.log(getPosName( "xemple.com?posName=Content+&+Community+Manager+(H/F)")); //Content+&+Community+Manager+(H/F)
console.log(getPosName( "exemple.com?posName=Club+&+Animator+(H/F)")); //Club+&+Animator+(H/F)
console.log(getPosName( "exemple.com?posName=Club+&+Animator+(H/F)&test=1")); // Club+&+Animator+(H/F)

Объяснение регулярного выражения:

(?=postName=) поиск назад, чтобы найти postName= для начала матча

(.+?) совпаденийчто угодно, вплоть до паттерна «Lookahead» ниже

(?=\&\w+?\=|$) паттерн «lohahead» для литерала &, за которым следует некоторый текст любой длины от 1 и далее \w+?, за которым следует =.Все это, или мы находимся в конце входной строки, обозначенной $

Обновление

Регулярное выражение выглядит как относительно новый.Если браузер или приложение не поддерживают просмотр регулярных выражений (например, Google Tag Manager в настоящее время), попробуйте этот обходной путь вместо этого:

function getPosName(uri) {
    let match = uri.match(/posName=(.+?)(?=\&\w+?\=|$)/);
    return match[1];
}

console.log(getPosName( "xemple.com?posName=Content+&+Community+Manager+(H/F)")); //Content+&+Community+Manager+(H/F)
console.log(getPosName( "exemple.com?posName=Club+&+Animator+(H/F)")); //Club+&+Animator+(H/F)
console.log(getPosName( "exemple.com?posName=Club+&+Animator+(H/F)&test=1")); // Club+&+Animator+(H/F)
...