Одинарные кавычки в строке с jQuery ajax

я столкнулся с проблемой, когда пользователь вводит данные, и если есть одинарные кавычки вообще, ошибки сценария.

каков наилучший способ обработки одинарных кавычек, которые вводят пользователи, чтобы это не мешало jquery/javascript?

обновление:

Я отправляю его через ajax в базу данных. вот параметр данных для вызова JSON ajax.
data: "{str_" + sectionName + " :'" + UpdateText + "',EntityID: '" + EntityID + "' }",
с текстом обновления, являющимся строкой, которая может содержать кавычки.

8 ответов


вы можете найти одну из многих строк.замените все реализации или напишите свои собственные, и просто замените любые одиночные или двойные кавычки на экранированную версию, такую как \" или \'.


вам нужно избежать кавычек с \ или в зависимости от того, как вы планируете использовать строку, вы можете использовать функции escape и unescape javascript.

alert(escape("mike's"));
alert(unescape(escape("mike's")));

также проверьте это способы escape-строки с jQuery


для экранирования значений в запросе AJAX,Не пишите свою собственную реализацию escape или use escape () метод. (escape() - это устаревший). Вместо этого создайте объект JSON и используйте JSON.stringify метод.

для вашего случая это должно быть так (игнорируя динамическое свойство на данный момент):

//Create Javascript object    
var obj = { SectionName: UpdateText, EntityID: EntityID };

позже в вашем запросе ajax вы можете сделать:

data: JSON.stringify(obj),

если вы хотите использовать динамические свойства с JSON-объект, то для вашего конкретного случая вы можете создать объект в два этапа, как:

var obj = { EntityID: EntityID };
obj["str_" + sectionName] = UpdateText;

эта практика избавит вас от ручного экранирования одинарных / двойных кавычек и других недопустимых символов. JSON.stringify позаботится об этом.

(Я пришел сюда, ища несколько похожую проблему, но не смог найти подходящее рабочее решение, поэтому закончил публикацию здесь)


поскольку вы упомянули AJAX, существует вероятность того, что строки с одиночными кавычками отклоняются на стороне сервера. Убедитесь, что вы используете escape string function предоставляется, например php, перед вставкой строк в базу данных.

$user_name = $_REQUEST['username'];
$user_name = mysqli_real_escape_string($conn,$user_name);
$query = "INSERT into chat(username,message) VALUES('".$user_name."')";

это помогает избежать любых одиночных или двойных кавычек, которые могут появиться в строке "$user_name". Также он предотвращает любые виды SQL-инъекций!


вы действительно должны санировать свой ввод внутри вашего серверного скрипта по целому ряду причин. Если вы просто отображаете все, что вводит пользователь, ваше приложение может быть использовано для запуска атаки межсайтовых сценариев.


Javascript имеет встроенный метод только для этого, который охватывает больше, чем просто одинарные кавычки. Его называют encodeURIComponent, от Javascript Kit:

используется для кодирования части параметра URI для символов, имеющих особое значение, чтобы отделить их от зарезервированных символов, таких как"&", которые действуют как разделители ключа/значения. Более включительно, чем encodeURI (), он кодирует все символы со специальным значением в строке URL, включая "=" и "&". Использовать этот метод только на части параметра URI; в противном случае URI больше не может быть допустимым, если он содержит один из символов, которые являются частью допустимого URI (т. е.:"+"), Но должен быть экранирован, если часть параметра URI.

таким образом, ваш код должен стать:

data: "{str_" + encodeURIComponent(sectionName) + " :'" + encodeURIComponent(UpdateText) + "',EntityID: '" + encodeURIComponent(EntityID) + "' }",

я кодирую все, что я отправляю в строке запроса, чтобы быть в безопасности, но кодирование EntityID может быть пропущено, потому что оно не исходит от пользователя(я предполагаю), поэтому вы знаете, что у него не будет специального письмена.


благодаря mbrevoort, Я подробнее остановлюсь на его ответе

когда вы отправляете одну кавычку в запросе empid = "t'via" empid =escape (empid)

когда вы получаете значение, включая одинарную кавычку var xxx = request.QueryString ("empid") xxx= unscape (xxx)

Если вы хотите найти / вставить значение, которое включает одну кавычку в запросе xxx=Replace(empid,"'",""")


чтобы избежать одной цитаты в Javascript, используйте

UpdateText.replace('\'', '\\'')

чтобы избежать всех одинарных кавычек использовать

UpdateText.replace(/'/g, '\\'')