问题
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?
回答1:
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))
回答2:
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))
回答3:
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
回答4:
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
回答5:
Reference here: url encode You have three options:
escape(str) will not encode: * @ - _ + . /
encodeURI(uri) will not encode: ~!@#$&*()=:/,;?+'
encodeURIComponent(uri) will not encode: ~!*()'
回答6:
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!
来源:https://stackoverflow.com/questions/54602850/encoding-url-in-javascript-not-encoding