кодировка URL в JavaScript, не кодируя & - PullRequest
0 голосов
/ 09 февраля 2019

Я кодирую следующую строку в javascript

encodeURI = "?qry=M & L";

Это дает мне вывод

qry=m%20&%20l

Так что "&" из M & L не кодируется.Что мне делать?

Ответы [ 6 ]

0 голосов
/ 24 июня 2019

Ссылка здесь: Кодировка URL У вас есть три варианта:

escape(str) will not encode: * @ - _ + . /
encodeURI(uri) will not encode: ~!@#$&*()=:/,;?+'
encodeURIComponent(uri) will not encode: ~!*()'
0 голосов
/ 09 февраля 2019

Вы должны использовать encodeURIComponent () вместо encodeURI ()

Примечание : Обычно encodeURIComponent () используется для кодирования строки (строки запроса), которая будетположить на URL.Если вы используете существующий URL для кодирования, то вы можете использовать encodeURI ()

const uri = "?qry=M & L";

console.log(encodeURIComponent(uri));

Ссылка : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

0 голосов
/ 09 февраля 2019

С здесь

Функция encodeURI () используется для кодирования URI.

Эта функция кодирует специальные символы, кроме:, /?: @ & = + $ # (Используйте encodeURIComponent() для кодирования этих символов).

И также см. этот ответ

Итак, вам, вероятно, придетсясделать что-то вроде

var inputWithSplChars = "M & L";
encodeURI  = "?qry=" + encodeURIComponent(inputWithSplChars);

Надеюсь, это поможет!Ура!

0 голосов
/ 09 февраля 2019

вместо этого используйте encoreURIComponent для кодирования & как %26, как показано ниже.Но он также кодирует другие специальные символы, такие как ? и =

let uri = "?qry=M & L"

console.log(encodeURIComponent(uri))
0 голосов
/ 09 февраля 2019

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 кодирует эти символы

0 голосов
/ 09 февраля 2019

Не кодирует символы, имеющие специальное значение (зарезервированные символы) для URI.В следующем примере показаны все части, которые может содержать «схема» URI.

Ссылка

encodeURI не будеткодировать следующие специальные символы

A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #

let uri = "?qry=M & L"

console.log(encodeURI(uri))

Таким образом, вы можете использовать encodeURIComponent , это закодирует все символы, кроме этих

A-Z a-z 0-9 - _ . ! ~ * ' ( )

let uri = "?qry=M & L"

console.log(encodeURIComponent(uri))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...