最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

encoding url in javascript not encoding & - Stack Overflow

programmeradmin4浏览0评论

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?

Share asked Feb 9, 2019 at 3:25 codeNinjacodeNinja 1,4624 gold badges30 silver badges62 bronze badges 0
Add a ment  | 

6 Answers 6

Reset to default 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))

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!

发布评论

评论列表(0)

  1. 暂无评论