Javascript 识别和编码URL的问题

Javascript 识别和编码URL的问题,javascript,url,Javascript,Url,我在分析/操作URI时遇到问题: 问题陈述: `/demo/bigquery/order_items?fields=users.email&f[users.comma]=%22Abbeville%2C+Georgia%22` const encodedExample = `/demo/bigquery/order_items?fields=users.email&f[users.comma]=%22Abbeville%2C+Georgia%22` // the last par

我在分析/操作URI时遇到问题:

问题陈述:

`/demo/bigquery/order_items?fields=users.email&f[users.comma]=%22Abbeville%2C+Georgia%22`
const encodedExample = `/demo/bigquery/order_items?fields=users.email&f[users.comma]=%22Abbeville%2C+Georgia%22` // the last param is encoded

const regularExample2 = `/demo/bigquery/order_items?fields=users.email&f[users.comma]="Abbeville, Georgia"` // 

const specialEncode = (url) => {
          for (let queryParam of urlObj) {
            const [urlKey, urlValue] = queryParam

            // Check to see if url contains f[users.comma]
            if (urlKey.includes('f[')) {
              urlObj.set(urlKey, encodeURI(urlValue))
            }
          }

          return urlObj.toString() // doesn't seem to work 
}
我想对f[users.comma]进行编码并返回它

[Case-1]我从后端服务获取一个url,对[users.comma]进行编码并返回它

[Case-2]我从后端服务获取了一个url,f[users.comma]已经编码。所以不要重复编码并返回它

预期输出:

`/demo/bigquery/order_items?fields=users.email&f[users.comma]=%22Abbeville%2C+Georgia%22`
const encodedExample = `/demo/bigquery/order_items?fields=users.email&f[users.comma]=%22Abbeville%2C+Georgia%22` // the last param is encoded

const regularExample2 = `/demo/bigquery/order_items?fields=users.email&f[users.comma]="Abbeville, Georgia"` // 

const specialEncode = (url) => {
          for (let queryParam of urlObj) {
            const [urlKey, urlValue] = queryParam

            // Check to see if url contains f[users.comma]
            if (urlKey.includes('f[')) {
              urlObj.set(urlKey, encodeURI(urlValue))
            }
          }

          return urlObj.toString() // doesn't seem to work 
}
代码:

`/demo/bigquery/order_items?fields=users.email&f[users.comma]=%22Abbeville%2C+Georgia%22`
const encodedExample = `/demo/bigquery/order_items?fields=users.email&f[users.comma]=%22Abbeville%2C+Georgia%22` // the last param is encoded

const regularExample2 = `/demo/bigquery/order_items?fields=users.email&f[users.comma]="Abbeville, Georgia"` // 

const specialEncode = (url) => {
          for (let queryParam of urlObj) {
            const [urlKey, urlValue] = queryParam

            // Check to see if url contains f[users.comma]
            if (urlKey.includes('f[')) {
              urlObj.set(urlKey, encodeURI(urlValue))
            }
          }

          return urlObj.toString() // doesn't seem to work 
}

我觉得我的方法太离谱了。非常感谢您的帮助。

因为后端服务返回一个编码或解码的url

我们可以首先从后端服务解码url(如果url已经编码,则不会产生任何异常)

const encodedExample=`/demo/bigquery/order_items?fields=users.email&f[users.comma]=%22Abbeville%2C+Georgia%22`//最后一个参数已编码
const regularExample2=`/demo/bigquery/order_items?fields=users.email&f[users.comma]=“佐治亚州阿贝维尔”`
const specialEncode=(url)=>{
让decodedUrl=decodeURI(url);
设encodedUrl=encodeURI(decodedUrl);
//修复“f[users.comma]”,因为encodeURI也将对[and]进行编码
encodedUrl=encodedUrl.replace(“f%5b用户.逗号%5D”,“f[用户.逗号]”)
console.log(encodedUrl);
返回编码durl;
}
特殊代码(EncodeDexSample);//日志和返回:/demo/bigquery/order_items?fields=用户。email&f[users.comma]=%22Abbeville%252C+Georgia%22
特殊代码(常规示例2);//日志和返回:/demo/bigquery/order_items?fields=用户。email&f[用户.逗号]=%22Abbeville%252C+Georgia%22