it-swarm.com.ru

Экранирование одинарных кавычек в строке 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.

27
Florian Mertens

Дело в том, что .replace() не изменяет саму строку, поэтому вы должны написать что-то вроде:

strInputString = strInputString.replace(...

Также кажется, что вы не выполняете экранирование персонажа правильно. Следующее работало для меня:

strInputString = strInputString.replace(/'/g, "\\'");
74
Nikita Tkachenko

Я согласен с тем, что эта var formattedString = string.replace(/'/g, "\\'"); работает очень хорошо, но, поскольку я использовал эту часть кода в PHP с платформой Prado (вы можете зарегистрировать скрипт js в классе PHP), мне нужен был этот пример, работающий внутри double цитаты. 

Решение, которое сработало для меня, заключается в том, что вам нужно поставить три \ и экранировать двойные кавычки ."var string = \"l'avancement\"; var formattedString = string.replace(/'/g, \"\\\'\");"

Я отвечаю на этот вопрос, так как мне было трудно обнаружить, что три \ были обходным решением.

2
YziGer

Лучше всего использовать JSON.stringify() для покрытия всех ваших баз, таких как обратная косая черта и другие специальные символы:

var strTest = "strResult = " + JSON.stringify(strInputString) + ";";
eval(strTest);
alert(strResult);

Обратите внимание, что он добавляет свои собственные двойные кавычки, поэтому вам не нужно больше включать одинарные кавычки.

0
Kev