query-string icon indicating copy to clipboard operation
query-string copied to clipboard

Parsing array that contains elements whose contain encoded pipe char (%7C instead of '|')

Open ShimShum2021 opened this issue 4 years ago • 1 comments

Hello. I am trying to parse an array of elements separated by the pipe character '|'. The elements themselves might contain the pipe char, hence those should be encoded first (to %7C). With array of 2 elements or above it works just fine. However with array of one element it doesn't. My guess is that parse doesn't see explicitly pipe char, it decodes %7C into pipe char and creates array of 2 elements. (A side note: this method with other special characters works just fine.) please refer the following code example:

// begin of code
function TestQueryString(): void {
  const value1: string = encodeURIComponent('a|b'); 
  const twoElements = parse(`foo=${value1}|2`, {
    arrayFormat: 'separator',
    arrayFormatSeparator: '|',
  });
  console.log(twoElements); // Works as expected got: [ 'a|b', '2']

  const oneElement = parse(`bar=${value1}`, {
    arrayFormat: 'separator',
    arrayFormatSeparator: '|',
  });
  console.log(oneElement); // Here is the issue. Expected: 'a|b' but got [ 'a', 'b']
}
// end of code

Screenshot with '|'. Not expected behavior in one element case: image

Screenshot with '%'. Expected behavior as another special characters: image

Thanks,

ShimShum2021 avatar Dec 23 '21 13:12 ShimShum2021

// @jpoehnelt

sindresorhus avatar Dec 27 '21 21:12 sindresorhus