Ответ 1
Для этого вам нужно использовать глобальное регулярное выражение, попробуйте его таким образом
str.replace(/"/g, '\\"');
проверьте синтаксис regex и параметры для функции replace здесь:
Скажем, у меня есть строковая переменная (var str
) следующим образом:
Чувак, он полностью сказал, что "Ты Рок!"
Теперь, если я сделаю это следующим образом -
Чувак, он полностью сказал, что "Скажи!"
Как это сделать, используя функцию JavaScript replace()
?
str.replace("\"","\\"");
работает не так хорошо. Он дает ошибку unterminated string literal
.
Теперь, если приведенное выше предложение должно быть сохранено в базе данных SQL, скажем, в MySQL как тип данных LONGTEXT (или любой другой VARCHAR-ish), какие еще оптимизации строк мне нужно выполнить? Цитаты и запятые не очень дружелюбны к строкам запроса. Я был бы признателен за несколько предложений по этому вопросу.
Для этого вам нужно использовать глобальное регулярное выражение, попробуйте его таким образом
str.replace(/"/g, '\\"');
проверьте синтаксис regex и параметры для функции replace здесь:
Попробуйте следующее:
str.replace("\"","\\\""); // (escape backslashes and embedded double-quotes)
Или используйте одиночные кавычки, чтобы процитировать ваш поиск и заменить строки:
str.replace('"','\\"'); // (still need to escape the backslash)
UPDATE: Как указал гелем, если первый параметр, переданный в .replace()
, является строкой, он заменит только первое вхождение. Чтобы заменить глобально, вы должны передать регулярное выражение с флагом g
(global):
str.replace(/"/g,"\\\"");
// or
str.replace(/"/g,'\\"');
Но зачем вы это делаете в JavaScript? Хорошо использовать эти escape-символы, если у вас есть строковый литерал, например:
var str = "Dude, he totally said that \"You Rock!\"";
Но это необходимо только в строковом литерале. То есть, если ваша переменная JS установлена в значение, которое пользователь вводил в поле формы, вам не нужно это экранирование.
Что касается вашего вопроса о сохранении такой строки в базе данных SQL, вам нужно только избежать символов, если вы встраиваете строковый литерал в свой SQL-запрос - и помните, что escape-символы, которые применяются в SQL, не являются (обычно) так же, как и для JS. Вы должны выполнить любую связанную с SQL-связью работу на стороне сервера.
var str = 'Dude, he totally said that "You Rock!"';
var var1 = str.replace(/\"/g,"\\\"");
alert(var1);