1

I am encoding the following string in javascript

encodeURI = "?qry=M & L";

This give me an output

qry=m%20&%20l

So the "&" from M & L is not getting encoded. What should i do?

codeNinja
  • 1,442
  • 3
  • 25
  • 61

6 Answers6

2

Does not encode characters that have special meaning (reserved characters) for a URI. The following example shows all the parts that a URI "scheme" can possibly contain.

Reference

encodeURI will not encode following special charcaters

A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #

let uri = "?qry=M & L"

console.log(encodeURI(uri))

So you can use encodeURIComponent ,this will encode all the characters except these

A-Z a-z 0-9 - _ . ! ~ * ' ( )

let uri = "?qry=M & L"

console.log(encodeURIComponent(uri))
Code Maniac
  • 37,143
  • 5
  • 39
  • 60
1

use encoreURIComponent instead to encode & as %26 as shown below. But it also encodes other special chars like ? and =

let uri = "?qry=M & L"

console.log(encodeURIComponent(uri))
Dhananjai Pai
  • 5,914
  • 1
  • 10
  • 25
0

The encodeURI() is not going to encode & as it will only encode certain set of special characters. to encode & you need to use encodeURIComponent.

encodeURI encodes everything except:

A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #

encodeURIComponent encodes everything except:

A-Z a-z 0-9 - _ . ! ~ * ' ( )

console.log(encodeURIComponent("?qry=M & L"));

Note the difference between the two methods when used to encode URLs.

const URL = "https://www.example.com/resource?query=10&id=20&name=hello%"

console.log(encodeURI(URL));
console.log(encodeURIComponent(URL));

From MDN:

Note that encodeURI by itself cannot form proper HTTP GET and POST requests, such as for XMLHTTPRequests, because "&", "+", and "=" are not encoded, which are treated as special characters in GET and POST requests. encodeURIComponent, however, does encode these characters

Fullstack Guy
  • 16,368
  • 3
  • 29
  • 44
0

You should be using encodeURIComponent() instead of encodeURI()

Note: Usually encodeURIComponent() is used to encode a string (query string), that would be put to the URL. If you are using an existing URL to be encoded, then you may use encodeURI()

const uri = "?qry=M & L";

console.log(encodeURIComponent(uri));

Reference: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

0

Reference here: url encode You have three options:

escape(str) will not encode: * @ - _ + . /
encodeURI(uri) will not encode: ~!@#$&*()=:/,;?+'
encodeURIComponent(uri) will not encode: ~!*()'
Logo2k
  • 1
-1

From here

The encodeURI() function is used to encode a URI.

This function encodes special characters, except: , / ? : @ & = + $ # (Use encodeURIComponent() to encode these characters).

And, also see this answer

So, you'll probably have to do something like

var inputWithSplChars = "M & L";
encodeURI  = "?qry=" + encodeURIComponent(inputWithSplChars);

Hope this helps! Cheers!