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?
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?
6 Answers
Reset to default 2Does 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))
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))
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./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
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/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
Reference here: url encode You have three options:
escape(str) will not encode: * @ - _ + . /
encodeURI(uri) will not encode: ~!@#$&*()=:/,;?+'
encodeURIComponent(uri) will not encode: ~!*()'
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!