Как подготовить кодированные данные POST на javascript?

Мне нужно отправить данные методом POST.

Например, у меня есть строка "bla & bla & bla". Я попытался использовать encodeURI и получил в результате результат "bla & bla & bla". Мне нужно заменить "&" с чем-то правильным для этого примера.

Каким методом я должен позвонить, чтобы подготовить правильные данные POST?

ОБНОВЛЕНО:

Мне нужно преобразовать только charachters, которые могут нарушить POST-запрос. Только они.

Ответ 1

>>> encodeURI("bla&bla&bla")

"bla&bla&bla"

>>> encodeURIComponent("bla&bla&bla")

"bla%26bla%26bla"

Ответ 2

Вы также можете использовать функцию escape(). Функция escape() кодирует строку. Эта функция делает переносную строку, поэтому ее можно передавать по любой сети на любой компьютер, поддерживающий символы ASCII. Эта функция кодирует специальные символы, за исключением: * @ - _ + . /

var queryStr = "bla&bla&bla";
alert(queryStr);               //bla&bla&bla
alert(escape(queryStr));       //bla%26bla%26bla

Используйте unescape() для декодирования строки.

var newQueryStr=escape(queryStr);
alert(unescape(newQueryStr));   //bla&bla&bla

Примечание:

    escape() will not encode: @*/+

    encodeURI() will not encode: [email protected]#$&*()=:/,;?+'

    encodeURIComponent() will not encode: ~!*()'

После некоторого поиска в Интернете я получил следующее:

побег()

Не используйте его.

encodeURI()

Используйте encodeURI, если вам нужен рабочий URL. Выполните этот вызов:

encodeURI("http://www.google.com/a file with spaces.html")

чтобы получить:

http://www.google.com/a%20file%20with%20spaces.html

Не вызывайте encodeURIComponent, так как он уничтожит URL-адрес и вернет

http%3A%2F%2Fwww.google.com%2Fa%20file%20with%20spaces.html

encodeURIComponent()

Используйте encodeURIComponent, если вы хотите кодировать параметр URL.

param1 = encodeURIComponent ( " http://xyz.com/?a=12&b=55" )

Then you may create the URL you need:

url = "http://domain.com/?param1=" + param1 + "&param2=99";

И вы получите полный URL-адрес:

http://www.domain.com/?param1=http%3A%2F%2Fxyz.com%2F%Ffa%3D12%26b%3D55¶m2=99

Обратите внимание, что encodeURIComponent не выходит за символ. Общая ошибка заключается в том, чтобы использовать его для создания атрибутов html, таких как href='MyUrl',, которые могут пострадать от инъекции. Если вы строите html из строк, используйте "вместо" для кавычек атрибутов или добавьте дополнительный слой кодировки ("может быть закодирован как% 27).

REF: Когда вы должны использовать escape вместо encodeURI/encodeURIComponent?

Кроме того, в качестве вы используете JQuery, посмотрите эту встроенную функцию.

Ответ 4

Я хочу, чтобы POST создала скрытую форму, созданную javascript.

Итак, вопрос в том, следует ли использовать encodeURIComponent() для каждой переменной POST.

Я не нашел ответа на вопрос Дмитрия (и моего) в этой теме. Но я нашел ответ в этом потоке.

В случае формы /POST, где у вас есть поле для загрузки, вы должны использовать <form enctype="multipart/form-data">, если поле загрузки не используется, вы должны выбрать себя как описанный здесь. Отправка формы должна выполняться полностью, поэтому нет необходимости явно использовать encodeURIComponent().

Если вы создаете Http POST без использования формы или без какой-либо библиотеки, которая создает Http POST из ваших данных, тогда вам нужно выбрать enctype = и объединить данные сами.

Это будет легко для application/x-www-form-urlencoded, где вы будете использовать encodeURIComponent() для каждого значения и присоединяться к ним точно так же, как и для запроса GET.

Если вы решите использовать multipart/form-data, то....? Вы должны google больше как закодировать и соединить их в таком случае.