Как избежать символа "&" амперсанда в форме ввода с помощью jQuery

У меня проблема с моим jQuery script, который отправляет данные через метод POST. Проблема заключается в том, что когда он отправляет данные через Ajax, у которого есть "&" амперсанд в предложении, он сократит предложение, когда будет найдено "&".

Для получения дополнительной информации ознакомьтесь с приведенными ниже изображениями.

The text that pass to ajax POSTOutput after ajax POST on firebugData that has been save in the databaseThe 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.