Ответ 1
>>> encodeURI("bla&bla&bla")
"bla&bla&bla"
>>> encodeURIComponent("bla&bla&bla")
"bla%26bla%26bla"
Мне нужно отправить данные методом POST.
Например, у меня есть строка "bla & bla & bla". Я попытался использовать encodeURI
и получил в результате результат "bla & bla & bla". Мне нужно заменить "&" с чем-то правильным для этого примера.
Каким методом я должен позвонить, чтобы подготовить правильные данные POST?
ОБНОВЛЕНО:
Мне нужно преобразовать только charachters, которые могут нарушить POST-запрос. Только они.
>>> encodeURI("bla&bla&bla")
"bla&bla&bla"
>>> encodeURIComponent("bla&bla&bla")
"bla%26bla%26bla"
Вы также можете использовать функцию 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 + "¶m2=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, посмотрите эту встроенную функцию.
Использовать encodeURIComponent(), поскольку encodeURI() не будет кодировать: [email protected]#$&*()=:/,;?+'
Это объясняется довольно хорошо по следующей ссылке:
Я хочу, чтобы 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 больше как закодировать и соединить их в таком случае.