Одиночные кавычки в строке с jQuery ajax - PullRequest
9 голосов
/ 04 декабря 2009

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

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

UPDATE:

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

Ответы [ 8 ]

22 голосов
/ 04 декабря 2009

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

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

Также проверьте это для способов экранирования строк с помощью jQuery

3 голосов
/ 29 марта 2016

Для экранирования значений в запросе AJAX, Не пишите собственную реализацию escape или используйте 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 позаботится об этом.

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

3 голосов
/ 04 декабря 2009

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

1 голос
/ 26 октября 2016

Поскольку вы упомянули 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-атак!

0 голосов
/ 08 сентября 2015

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

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

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

UpdateText.replace(/'/g, '\\\'')
0 голосов
/ 22 ноября 2012

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

Когда вы отправляете одинарную цитату в запросе

empid = " T'via" 
empid = escape(empid)

Когда Вы получаете значение, включающее одинарную кавычку

var xxx = request.QueryString("empid") 
xxx = unscape(xxx)

Если вы хотите найти / вставить значение, которое включает в себя одинарную кавычку в запросе

xxx = Replace(empid, "'", "''")
0 голосов
/ 03 марта 2010

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

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

Итак, ваш код должен стать:

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

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

0 голосов
/ 04 декабря 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...