Получить параметры из URL с амперсандом - PullRequest
0 голосов
/ 09 апреля 2020

Вопрос: Как правильно получить параметры из URL с символами амперсанда?

Контекст: я пытаюсь выяснить, почему это результат iTunes Store Webservice возвращает разные данные при удалении amp; . Я использую этот инструмент сравнения: https://www.diffnow.com/compare-urls

Оригинальный URL:

https://itunes.apple.com/search?term=star&country=au&media=movie&all

Что меня больше смущает, так это all значение в URL. Исходя из do c из iTunes Store Webservice , это либо attribute, либо entity.

Но, тем не менее, я все равно получаю другой результат. Повторяю,

исходный URL:

https://itunes.apple.com/search?term=star&country=au&media=movie&all

возвращает различные данные для следующих данных:

a. https://itunes.apple.com/search?term=star&country=au&media=movie&attribute=all
b. https://itunes.apple.com/search?term=star&country=au&media=movie&entity=all
c. https://itunes.apple.com/search?term=star&country=au&media=movie&all

1 Ответ

0 голосов
/ 09 апреля 2020

Вы можете создать небольшого помощника и использовать конструктор URL , чтобы получить объект, представляющий URL, определенный параметрами.

Из этого объекта мы получим найдите свойство, которое является строкой запроса и замените & на &.

function getItunesParameters(url) {
  const { search } = new URL(url);
  const parsedQuery = search.replace(/&/g, '&');

  return parsedQuery;
}

getItunesParameters('https://itunes.apple.com/search?term=star&country=au&media=movie&all');
// => "?term=star&country=au&media=movie&all"

При желании вы можете вернуть объект, если вам легко справиться потом

function getItunesParameters(url) {
  const { search } = new URL(url);
  const parsedQuery = search.replace(/&/g, '&');

  return parsedQuery
    .slice(1)
    .split('&')
    .reduce((acc, query) => {
      const [key, value] = query.split('=');
      return { ...acc, [key]: value || '' };
    }, {});
}

getItunesParameters('https://itunes.apple.com/search?term=star&country=au&media=movie&all'); //?
// => {term: "star", country: "au", media: "movie", all: ""}

Удачи!

...