使用 & 符号从 URL 获取参数

Get parameters from URL with ampersand

问题:如何从带符号的 URL 中正确获取参数?

上下文: 我想弄清楚为什么它是 iTunes Store Webservice returns different data when removing amp;. I'm using this diff tool: https://www.diffnow.com/compare-urls

的结果

原文URL:

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

更让我困惑的是 all 中的值 url。根据 iTunes Store Webservice 的文档,它是 attributeentity

但无论如何,我仍然得到不同的结果。重申一下,

原url:

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

returns 以下数据不同:

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

可以创建一个小帮手,使用URL构造函数得到一个对象,表示参数定义的URL

从这个对象中,我们将得到 search 属性 它是 查询字符串 并将 & 替换为&.

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"

您可以选择 return 一个对象,如果您以后可以轻松处理的话

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: ""}

祝你好运!