Как избежать символа "&" амперсанда в форме ввода с помощью jQuery
У меня проблема с моим jQuery script, который отправляет данные через метод POST. Проблема заключается в том, что когда он отправляет данные через Ajax, у которого есть "&" амперсанд в предложении, он сократит предложение, когда будет найдено "&".
Для получения дополнительной информации ознакомьтесь с приведенными ниже изображениями.
![The text that pass to ajax POST]()
![Output after ajax POST on firebug]()
![Data that has been save in the database]()
![The jQuery ajax POST]()
Ответы
Ответ 1
htmlentites
Эта функция идентична htmlspecialchars() всеми способами, за исключением htmlentites(), все символы, имеющие эквиваленты сущности HTML, переводятся в эти объекты.
Если вы хотите декодировать вместо этого (обратный), вы можете использовать html_entity_decode().
Пример:
echo htmlentities("&"); // &
если вы прямо сделаете это в браузере, вы сможете использовать:
encodeURIComponent(string input);
Пример:
encodeURIComponent($.trim($("input[name=t-tim_rendered-"+id+"]").val().toString()));
Ответ 2
У меня возникла огромная проблема именно в этой ситуации.
Это просто сказать, что последний ответ от Andrew Koester - идеальный ответ, который я искал.
Если вы передаете несколько записей формы из формы jQuery в PHP через вызов .ajax(), например:
data: "name=" + name + "& message =" + message +...
НЕ ИСПОЛЬЗУЙТЕ ДАННЫЙ МЕТОД, он заблокирует символ амперсанда (&) от записи пользователем в любом из полей ввода вашей формы.
Используйте это вместо этого, как предложил Эндрю:
data: { "name": name, "email": email, "subject": subject, "comments": comments},
Таким образом, пользователь может писать любой особый символ, не беспокоясь о конфликте с объявлением ajax.
Ответ 3
Вы можете использовать встроенную функцию javascript escape()
В строке 74
data: : "&task_d=" + escape(task_d) + ""
В качестве альтернативы вы можете заключить свои строковые значения в кавычки
data: : "&task_d='" + task_d + "'"
Ответ 4
Если вы передадите свой параметр data
как объект Javascript, он преобразует символы для вас (и IMO сделает код более аккуратным). Поэтому вы должны изменить свой вызов $.ajax на следующее:
data: {"user_id": user_id, "time_r": time_r, "task_d": task_d, "p_id": p_id, "df": finished},
Ответ 5
Вы можете использовать 'encodeURIComponent' для выполнения кодировки URL для этого компонента. Я использовал это и проверял с браузерами IE, Firefox и Chrome.