2009-12-04 3 views
8

У меня возникла проблема, когда пользователь вводит данные, а если есть одинарные кавычки, ошибки в скрипте отсутствуют.Одиночные кавычки в строке с jQuery ajax

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

UPDATE:

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

+2

Предоставление образца кода было бы очень полезно –

+1

Что вы делаете с вводом? –

+0

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

ответ

3

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

21

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

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

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

+0

Это работало как шарм! – CodeLikeBeaker

0

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

+1

Соответствующий xkcd http://xkcd.com/327/ – thenoviceoof

+0

Я думаю, его проблема в том, что он получает ошибку javascript на стороне клиента при попытке отправить данные на сервер. –

0

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

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

Так что ваш код должен стать:

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

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

+2

encodeURI и encodeURIComponent не избегают одиночных кавычек, по крайней мере, не в текущих версиях Chrome/Safari –

0

Благодаря mbrevoort, я подробнее рассказать о своем ответе

Когда Вы отправляете апостроф в EmpId запроса = «T'via» EmpID = побег (EmpId)

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

Если вы хотите найти/вставить значение, которое включает в себя апостроф в ххх запроса = Replace (EmpID, "'", "'")

0

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

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

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

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

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

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

1

Поскольку вы упомянули 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-инъекций!

Смежные вопросы