Одиночная кавычка в параметрах функции JavaScript - PullRequest
42 голосов
/ 05 января 2012

Мне нужно экранировать одинарные кавычки в параметрах функции JavaScript, чтобы избежать этого:

onclick="Javascript:INSERT_PRODUCT('188267','WILL AND GRACE','32311','L'ANNIVERSARIO DINOZZE ','20101113|04|18|','13/11/2010 0.00.00','CANALE 5  ',this);"

Но мне нужно экранировать их внутри вызова функции, поскольку я не знаю значений, которые будут переданы (переменные в БДЯ не могу сбежать из базы данных).

Есть ли функция, которая позволяет мне делать что-то вроде следующего?

onclick="Javascript:function(escape(param1), escape(param2), escape(param3));"

Ответы [ 6 ]

18 голосов
/ 05 января 2012
 JSON.stringify(plainTextStr).replace(/&/, "&").replace(/"/g, """)

создаст строку, которую вы можете безопасно встроить в цитируемый атрибут, и которая будет иметь то же значение, что и интерпретатор JavaScript.

Единственное предостережение в том, что некоторые Unicode переводы строк (U + 2028 и U + 2029) необходимо экранировать перед внедрением в строковые литералы JavaScript, но JSON требует только \r и \n сбежать.

11 голосов
/ 05 января 2012

Избегайте апострофа с обратной косой чертой:

onclick="INSERT_PRODUCT('188267','WILL AND GRACE ','32311','L\'ANNIVERSARIO DI NOZZE ','20101113|04|18|','13/11/2010 0.00.00','CANALE 5 ',this);"
7 голосов
/ 07 февраля 2013

Возможно, это не совсем понятно из вопроса, но при условии, что все, что вам нужно, это отправить это в скрипт PHP для хранения в базе данных, вы, конечно, в идеале использовали бы различные методы PHP, такие как stripslashes() - но еслиВы на самом деле не пытаетесь стать слишком причудливым, достаточно просто добавить 1 косую черту перед любой одинарной кавычкой, чтобы отправить SQL-запрос прямо в PHP со стороны клиента.Это небезопасно , но, возможно, и не нужно.

str.replace(/'/g, "\\'"); // escaping \ with \, so used 2x

добивается цели, как, например, что-то вроде этого:

var body = $('#body').val().replace(/'/g, "\\'");
myCustomSQLqueryFunction("UPDATE mytable SET `content`='"+ body +"';" );

MySQL теперь будетсохраните ваш body, как вы видите его в поле формы.

4 голосов
/ 28 ноября 2014

Эта функция сработала для меня (она снова удаляет и восстанавливает кавычку): догадываясь, что отправляемые данные являются значением элемента ввода,

var Url = encodeURIComponent($('#userInput').val().replace("'","\\'"));

Затем снова получите исходный текст:

var originalText = decodeURIComponent(Url);
1 голос
/ 15 декабря 2015
var cmpdetail = cmpdetail.replace(/'/g, "\\'");

это работает для меня.

0 голосов
/ 31 мая 2016

Я предпочитаю использовать одинарные кавычки для определения строк JavaScript. Затем я избегаю своих двойных кавычек следующим образом.

Вот как я это делаю, в основном str.replace(/[\""]/g, '\\"').

var display = document.getElementById('output');
var str = 'class="whatever-foo__input" id="node-key"';
display.innerHTML = str.replace(/[\""]/g, '\\"');

//will return class=\"whatever-foo__input\" id=\"node-key\"
<span id="output"></span>
...