encodeURI()
не собирается кодировать &
, поскольку оно будет кодировать только определенный набор специальных символов.для кодирования &
необходимо использовать encodeURIComponent
.
encodeURI
кодирует все, кроме:
A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #
encodeURIComponent
кодирует все, кроме:
A-Z a-z 0-9 - _ . ! ~ * ' ( )
console.log(encodeURIComponent("?qry=M & L"));
Обратите внимание на разницу между двумя методами, используемыми для кодирования URL-адресов.
const URL = "https://www.example.com/resource?query=10&id=20&name=hello%"
console.log(encodeURI(URL));
console.log(encodeURIComponent(URL));
С MDN :
Обратите внимание, что encodeURI сам по себе не может формировать правильные запросы HTTP GET и POST, например, дляXMLHTTPRequests, потому что «&», «+» и «=» не кодируются, что рассматривается как специальные символы в запросах GET и POST.Однако encodeURIComponent кодирует эти символы