jQuery вырезает знак "+". Как пофиксить?
1.
Дмитрий (28.09.2011 / 16:18)
Такая штука. Заметил, что при передаче POST запроса jQuery вырезает знак "+". При обычном POST все отправляется нормально. В чем может быть причина?
Данные POST я отправляю примерно таким макаром (начало обработки):
var flop = $('#flop').val();
var name = $('#name').val();
$.ajax({
type: 'POST',
url: 'адрес обработчика',
cache: false,
data: 'flop=' + flop + '&name=' + name,
dataType: 'html',
success: function(repsone)
{
Обычно юзаю jquery-1.4.2.min, сегодня попробовал версию 1.6.3 - ничего не изменилось.
Как пофиксить? Мне в некоторых местах кода надо передавать знак "+" постом.
2.
AHgpyxA (28.09.2011 / 16:22)
один из вариантов - заменять плюс при подаче запроса на что-нибудь типа "_plus_", а при получении запроса менять обратно.
3.
Ванёк (28.09.2011 / 16:34)
http://ru.w3support.net/index.php?db=so&id=1683198
Добавлено через 05:10 сек.
AHgpyxA (28 Сентября 2011 / 16:22)
один из вариантов - заменять плюс при подаче запроса на что-нибудь типа "_plus_", а при получении запроса менять обратно.
Если я правильно понял тут + объединяет между собой имена переменных и их значения,а сам + не передается в запросе.
4.
Дмитрий (28.09.2011 / 17:13)
2.
AHgpyxA, по твоему совету склепал ф-ю обработки знака +
function check_plus(text)
{
text = text.replace(new RegExp('\\+','g'),"_plus_");
return text;
};
Ею можно обрабатывать как выборочно переменные перед передачей, так и полностью data.
Гемор заключается в том, что теперь надо каждую обработанную таким макаром переменную в обработчике заменять обратно
$text = preg_replace('|_plus_|iu','+', $text);
Спасибо, вопрос решил, но это все-таки костыль. Хотельсь бы решить вопрос более глобально.
3.
Vanich, в той ссылке советуют то же самое, что во 2 посте - т.е. маскировку знака "+".
5.
ramzes (28.09.2011 / 22:26)
4.
dima.london, зачем регулярками? Str_replace
6.
Дмитрий (28.09.2011 / 22:29)
6.
ramzes, что ты имеешь ввиду?
7.
ramzes (28.09.2011 / 22:32)
$text = str_replace('_plus_', '+', $text);
вот это
8.
Дмитрий (28.09.2011 / 22:36)
8.
ramzes, а, ну это понятно, я думал, ты про JS
9.
ramzes (28.09.2011 / 22:45)
9.
dima.london, кроме всего прочего, у меня отправляет плюсы на ура =) тоже jquery но 1.3.2.js
10.
ramzes (28.09.2011 / 23:04)
12.
ZiGR, так и так, его надо реплейсить
интересно то что, у меня нет такой проблемы, она точно должна быть? может дело не в самом js? может ему что то мешает?
.. хотя я немного иначе данные отправляю..
11.
Дмитрий (29.09.2011 / 00:43)
11.
ramzes, я читал, что 1.3.2, 1.4.2 и 1.5.2 бажные - допускают атаку через XSS
12.
ramzes (29.09.2011 / 01:18)
15.
dima.london, какую это? пардон я крайне плохо понимаю какие могут быть уязвимости в js вообще
13.
Дмитрий (29.09.2011 / 01:32)
Честно, не могу найти статью. Там подробно расписано это. Немного упоминается
ЗДЕСЬ
— Пофиксили уязвимость XSS: $("#id") работал как селектор, $("<img>") создавал элемент, а $("#<mg>") тоже создавал элемент.
Добавлено через 02:39 сек.
к слову, уже вышла
версия 1.6.4
14.
ramzes (29.09.2011 / 02:31)
17.
dima.london, заменил на 1.6.4, все отлично с +
ни куда не исчезают
видимо дело в том как ты отправляешь данные
15.
Валерий (08.11.2011 / 16:50)
Сегодня столкнулся с той же проблемой.. + вырезался.. да и вообще всё что после плюса шло, на сервак не отправлялось. Решил проблему так. Нужно просто обрабатывать значения функцией encodeURIComponent .. это аналог php функции urlencode
post = "var1=" + encodeURIComponent(var1) + "&var2=" + encodeURIComponent(var2);
URL:
https://visavi.net/topics/25206