encodeURI (JSON.stringify ()), показывающий% 255B в URL - PullRequest
2 голосов
/ 19 сентября 2019

Я пытаюсь передать queryParam в Angular, который состоит из массива объектов как таковых fooArray = [{foo: 'bar', foo: false}, {foo: 'bar', foo: false}].В URL queryParam я получаю следующее:% 255B при использовании encodeURI(JSON.stringify(this.fooArray))

Я пытался использовать encodeURI (JSON.stringify ()) для кодирования массива в queryParam и JSON.parse (decodeURIComponent ()) для получения параметра

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

fooParam: encodeURI(JSON.stringify(this.fooArray))

JSON.parse(decodeURIComponent(params["fooParam"]))

1 Ответ

4 голосов
/ 19 сентября 2019

Вы дважды кодируете 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.

Два примечания:

  1. Кодировать его следует только один раз.Возможно, вы передаете строку чему-то, что уже будет URI-кодировать ее для вас?Если это так, не используйте encodeURI.

  2. Обычно вы хотите encodeURIComponent, а не encodeURI (потому что обычно вы кодируете только компонент URI, а невсе дело).

...