2013-12-05 3 views
0

Я рассмотрел множество вопросов, заданных с одной и той же вещью, но это, похоже, не работает для меня.Escaping специальных символов в Javascript, чтобы использовать их в MySql

У меня есть текстовая область HTML, из которой я собираю комментарии пользователя, и я храню их в базе данных MySql. Поэтому я хочу, чтобы специальные символы, вводимые пользователями, также принимались без каких-либо ошибок/исключений и сохраняли их в базе данных.

Я столкнулся с решением для символа новой строки, и я добавил эту строку кода, которая хорошо работает.

var comment = document.getElementById("commentArea").value; 
comment = comment.replace(/\n/g, '<br />'); 

Другие символы, такие как &$%#( все будут вставлены без каких-либо проблем для котировок, за исключением. Я не уверен, что делать, чтобы избежать их. Я пробовал comment.replace("\'","&39") для экранирования одиночных кавычек, но это, похоже, не работает.

Как избежать одиночных и двойных кавычек? Заранее спасибо.

EDIT: Я использую Jsp и Servlets для своего приложения. Должен ли я избежать этих символов в сервлете?

Позвольте мне знать причину, предшествующую downvoting.

Update: Как было предложено в ответах и ​​комментариях, я использовал подготовленное заявление и передал строку с помощью метода setString(). Однако проблема все еще сохраняется.

Фрагмент кода, я использовал это:

String query = "insert into db_name (column1,column2,column3,column4) values("SomeValue1","SomeValue2",?,"SomeValue3")"; 
st=conn.prepareStatement(query); 
st.setString(1,"String_from_TextArea"); 
int rows = st.executeUpdate(); 
+1

Какой драйвер вы используете? NodeJs, PHP? Вы должны избегать значения на стороне сервера (а не на стороне клиента). – Andrew

+0

Забудьте об этом на стороне клиента. Внутри серверного кода вам нужно использовать mysqli_real_escape_string перед тем, как написать комментарий в базу данных. – jeff

+0

Это действительно должно быть сделано на стороне сервера, а не на стороне клиента. Например, если вы используете PHP, вы можете избежать строки с помощью добавлений PHP: http://cl1.php.net/addslashes. Если это не вариант, почему это должно быть сделано клиентом? – Matt

ответ

4

Там нет необходимости бежать что-нибудь в JavaScript, вы не будете вставлять его напрямую, а через какой-то серверный скрипт (например, PHP) , Это место для выполнения таких задач. Тем более, что вы никогда не сможете доверять чему-либо, что делается с помощью JavaScript. Пользователь может легко изменить или даже отключить JavaScript. Это не должно тормозить ваш сайт или базу данных!

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

+0

Так я избегаю их в сервлете? Использование метода replace()? –

+0

@AnjanBaradwaj Нет, не используйте то, что не создается для экранирования. Я не знаю, какой серверный язык вы используете, поэтому я не могу сказать вам, что именно будет, но, вероятно, для этого есть некоторые специальные функции. –

+0

Как я уже говорил, я работаю с Java, Jsp и Servlets. –

0

Если вы хотите, чтобы URI кодировал строку, вы можете использовать функции encodeURIComponent() и decodeURIComponent(). Это ссылка на страницу документации функции.

http://www.w3schools.com/jsref/jsref_encodeuricomponent.asp

Надежда, что помогает.

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