Лучший способ разделить параметры запроса, присутствующие в строке, а затем закодировать

У меня есть несколько строк, которые могут быть в этом формате:

const s1 = "https://test1.com/testPage";
const s2 = "https://test2.com/testPage?specificParam=1"
const s3 = "https://test3.com/someOtherPage?specificParam=2&restParam=3";

Поэтому, когда я читаю это в функции, мне нужно проверить, включены ли в строку параметры запроса, если да, то мне нужно закодировать ее, используя ее window.btoa() для всех параметров запроса. Если не напрямую перенаправить. Может ли кто-нибудь помочь, как это сделать?

function test(path){
   const href = window.location.origin + path;
   if (href.includes('?')){
      // split all the query params and then attach `btoa` to it and then openthe url 
       with encoded params
   }
   window.open(href, '_blank', 'no-referer');
} 
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать конструктор URL.

const url = new URL("https://test3.com/someOtherPage?specificParam=2&restParam=3");
if (url.search) {
    // use url.search or url.searchParams
    // base64 encode each query param value
    url.search = new URLSearchParams([...url.searchParams].map(([k, v]) => [k, btoa(v)]));
}

Как я могу применить window. btoa по всем параметрам?

lrr59 08.04.2024 19:47

@ lrr59 lrr59 Должны ли мы предположить, что исходная строка не закодирована как правильный URL-адрес?

Unmitigated 08.04.2024 19:48

да, он не закодирован. Пользовательский интерфейс должен его закодировать, ведь параметры запроса не закодированы.

lrr59 08.04.2024 19:48

@ lrr59 Вы можете использовать url.search = new URLSearchParams(url.search.slice(1).split('&').map(p => { const [k, v] = p.split('='); return [k, btoa(v)]; }));, но это не сработает, если в значениях параметров есть специальные символы, которые не имеют правильного формата.

Unmitigated 08.04.2024 19:53

возникла проблема при копировании вашего фрагмента. Не могли бы вы добавить его к той же функции в самом ответе.

lrr59 08.04.2024 20:09

Я получаю это: тип «URLSearchParams» не может быть присвоен типу «string».ts(2322) при использовании с машинописным текстом. Я использовал это так: `````` const redirectUrl: URL = new URL("test2.com/testPage?specificParam=1"); if (redirectUrl.search) { redirectUrl.search = new URLSearchParams([...redirectUrl.searchParams].map(([k, v]) => [k, window.btoa(v)])); } window.open(redirectPath, '_blank', 'no-referer'); ``````

lrr59 08.04.2024 20:42

@lrr59 В этом случае вы можете добавить .toString() в конец, т. е. url.search = new URLSearchParams([...url.searchParams].map(([k, v]) => [k, btoa(v)])).toString();

Unmitigated 08.04.2024 20:47

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