Я рассмотрел множество вопросов, заданных с одной и той же вещью, но это, похоже, не работает для меня.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();
Какой драйвер вы используете? NodeJs, PHP? Вы должны избегать значения на стороне сервера (а не на стороне клиента). – Andrew
Забудьте об этом на стороне клиента. Внутри серверного кода вам нужно использовать mysqli_real_escape_string перед тем, как написать комментарий в базу данных. – jeff
Это действительно должно быть сделано на стороне сервера, а не на стороне клиента. Например, если вы используете PHP, вы можете избежать строки с помощью добавлений PHP: http://cl1.php.net/addslashes. Если это не вариант, почему это должно быть сделано клиентом? – Matt