Javascript encodeURI(JSON.stringify())在URL中显示%255B

Javascript encodeURI(JSON.stringify())在URL中显示%255B,javascript,urlencode,query-parameters,encodeuricomponent,Javascript,Urlencode,Query Parameters,Encodeuricomponent,我试图在Angular中传递一个queryParam,它由一个对象数组组成,比如fooArray=[{foo:'bar',foo:false},{foo:'bar',foo:false}]。在URL查询参数中,我在使用encodeURIJSON.stringifythis.fooArray时收到以下信息:%255B 我已经尝试使用encodeURIJSON.stringify将数组编码到queryParam中,并使用JSON.parsedecodeURIComponent检索参数 fooArra

我试图在Angular中传递一个queryParam,它由一个对象数组组成,比如fooArray=[{foo:'bar',foo:false},{foo:'bar',foo:false}]。在URL查询参数中,我在使用encodeURIJSON.stringifythis.fooArray时收到以下信息:%255B

我已经尝试使用encodeURIJSON.stringify将数组编码到queryParam中,并使用JSON.parsedecodeURIComponent检索参数

fooArray=[{foo:'bar',foo:false},{foo:'bar',foo:false}]

fooParam:encodeURIJSON.stringifythis.fooArray


JSON.parsedecodeURIComponentparams[fooParam]

您对URL进行了双重编码。这:

encodeURI(JSON.stringify([{foo: 'bar', foo: false}, {foo: 'bar', foo: false}]))
导致

"%5B%7B%22foo%22:false%7D,%7B%22foo%22:false%7D%5D"
如果您再次调用encodeURI,您将得到

"%255B%257B%2522foo%2522:false%257D,%257B%2522foo%2522:false%257D%255D"
…因为%被编码为%25

注二:

你应该只编码一次。也许您正在将字符串传递给已经为您进行URI编码的对象?如果是这样,不要使用encodeURI

通常,您需要的是encodeURIComponent,而不是encodeURI,因为通常您只编码hte URI的一个组件,而不是整个组件


您正在对URL进行双重编码。这:

encodeURI(JSON.stringify([{foo: 'bar', foo: false}, {foo: 'bar', foo: false}]))
导致

"%5B%7B%22foo%22:false%7D,%7B%22foo%22:false%7D%5D"
如果您再次调用encodeURI,您将得到

"%255B%257B%2522foo%2522:false%257D,%257B%2522foo%2522:false%257D%255D"
…因为%被编码为%25

注二:

您应该只对其编码一次。也许您正在将字符串传递给已经为您进行URI编码的对象?如果是这样,不要使用encodeURI

通常,您需要的是encodeURIComponent,而不是encodeURI,因为通常您只编码hte URI的一个组件,而不是整个组件


请注意,您的第二个键foo:false覆盖了第一个foo:'bar'encodeURIJSON。stringify[{foo:'bar',foo:false},{foo:'bar',foo:false}]为我提供了%5B%7B%22foo%22:false%7D,%7B%22foo%22:false%7D%5D。我觉得你好像在对它进行双重编码,因为如果你再次传递它,%将正确编码为%25。你能再添加一点上下文吗?例如,您在哪里使用查询参数?在路由器中。导航?如果是这样的话,你不需要像angular为你做的那样编码任何东西。请注意,你的第二个键foo:false覆盖了第一个foo:'bar'encodeURIJSON。stringify[{foo:'bar',foo:false},{foo:'bar',foo:false}]给了我%5B%7B%22foo%22:false%7D,%7B%22foo%22:false%7D%5D。我觉得你好像在对它进行双重编码,因为如果你再次传递它,%将正确编码为%25。你能再添加一点上下文吗?例如,您在哪里使用查询参数?在路由器中。导航?如果是这样,您不需要编码任何东西,因为angular正在为您编码。