encoding url in javascript not encoding &

十年热恋 提交于 2019-12-11 07:36:55

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!