Удаление одиночных кавычек в строке JavaScript для оценки JavaScript
У меня есть проект, в котором оценивается некоторый JavaScript var. Поскольку строка должна быть экранирована (только одинарные кавычки), я написал тот же самый код в тестовой функции. У меня есть следующий бит довольно простого кода JavaScript:
function testEscape() {
var strResult = "";
var strInputString = "fsdsd'4565sd";
// Here, the string needs to be escaped for single quotes for the eval
// to work as is. The following does NOT work! Help!
strInputString.replace(/'/g, "''");
var strTest = "strResult = '" + strInputString + "';";
eval(strTest);
alert(strResult);
}
И я хочу предупредить его, сказав: fsdsd'4565sd
.
Ответы
Ответ 1
Дело в том, что .replace()
не модифицирует сама строку, поэтому вы должны написать что-то вроде:
strInputString = strInputString.replace(...
Также кажется, что вы не выполняете правильное выполнение символа. Для меня работали следующие:
strInputString = strInputString.replace(/'/g, "\\'");
Ответ 2
Я согласен, что этот var formattedString = string.replace(/'/g, "\\'");
работает очень хорошо, но так как я использовал эту часть кода в PHP с каркасом Prado (вы можете зарегистрировать js script в классе PHP), мне нужен этот образец, работающий внутри двойных кавычек,
Решение, которое сработало для меня, состоит в том, что вам нужно поставить три \
и избежать двойных кавычек.
"var string = \"l'avancement\";
var formattedString = string.replace(/'/g, \"\\\'\");"
Я отвечаю на этот вопрос, так как у меня возникли проблемы с поиском трех твиков \
.
Ответ 3
Лучше всего использовать JSON.stringify()
, чтобы покрыть все ваши базы, такие как обратная косая черта и другие специальные символы. Вот ваша оригинальная функция с ее заменой вместо strInputString
:
function testEscape() {
var strResult = "";
var strInputString = "fsdsd'4565sd";
var strTest = "strResult = " + JSON.stringify(strInputString) + ";";
eval(strTest);
alert(strResult);
}
(Таким образом, ваш strInputString
может быть чем-то вроде \\\'\"'"''\\abc'\
, и он все равно будет работать нормально.)
Обратите внимание, что он добавляет свои собственные двойные кавычки, поэтому вам больше не нужно включать одинарные кавычки.
Ответ 4
Только это сработало для меня:
searchKeyword.replace("\'", "\\\'");//searchKeyword contains "d'av"
Итак, переменная результата будет содержать "d\'av".
Я не знаю, почему с RegEx не работает, возможно, из-за JS Framework, который я использую (Backbone.js)
Ответ 5
strInputString = strInputString.replace(/'/g, "''");