Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Экранирование кавычек (https://javascript.ru/forum/dom-window/59598-ehkranirovanie-kavychek.html)

tvixa 18.11.2015 12:56

Экранирование кавычек
 
Добрый день.
Хотела уточнить как правильно заэкранировать кавычки в данном случае, я вызываю функцию clickEditCampaing и передаю параметры списком и при наличии кавычек в самом тексте естественно происходит ошибка. Если в параметрах есть кавычки, то логика путает кавычки текста с " в функции и не может выбрать нужные параметры. Подскажите пожалуйста как корректно это оформить. Спасибо
$("#tbody-active-campaings").append("<tr class='tr-campaing' id='campaing_" + campaignId + "' bnrid='" + campaignId + "'>" +
                            "<td class='td-index'><strong>" + (i + 1) + "</strong></td>" +
                            "<td><img title='' alt='" + campaignTitle + "' src='" + baseUrl + imgPath + bannerTitle + "." + output_format + "' height='60' width='153'>" +
                            "<td style='word-wrap:break-word;'><button type='button' class='btn btn-xs' data-toggle='tooltip' data-placement='right' title='Редактировать акцию' onclick='clickEditCampaing("
                            + campaignId + ", &quot;" + campaignTitle + "&quot;, &quot;" + campaingDescr + "&quot;,&quot;" + campaingFullDescr + "&quot;,&quot;" + conditionsDescr + "&quot;,&quot;" + mrctId + "&quot;,&quot;" + campStart + "&quot;,&quot;" + campStop + "&quot;,&quot;" + bannerTitle + "&quot;, &quot;" + link + "&quot;)'><span class='glyphicon glyphicon-pencil'></span></button></td>" +
                            "</tr>");

ksa 18.11.2015 13:19

Цитата:

Сообщение от tvixa
как правильно заэкранировать кавычки

Вот несколько вариантов...

alert('1. "test"');
alert("2. 'test'");
alert("3. \"test\"");
alert('4. \'test\'');

tvixa 18.11.2015 13:26

Нет, это не совсем то, просто заэкранировать я могу, но при передаче параметров происходит путаница и скрипт не может понять где начало а где конец параметра из-за кавычки предположим названия ресторана

ksa 18.11.2015 13:44

Цитата:

Сообщение от tvixa
это не совсем то

Тогда сделай простой тестовый пример, а не ту портянку... :) Дабы понять про что ты спрашиваешь.

tvixa 18.11.2015 13:55

Я получаю xml считываю из него все данные, в частности есть поля с кавычками(название ресторана, компании итд), присваиваю эти значения переменной и передаю их дальше в функцию, передаю их списком в кавычках, это форма записи при отправке, а из-за того,что кавычки присутствуют в названии именно campaignTitle происходит путаница, т.е. скрипт теряет границы передаваемого параметра. Сократила пример
campaignTitle = '"Турандот"';

<button type='button' class='btn btn-xs' title='Редактировать акцию' onclick='clickEditCampaing("+ campaignId + ", &quot;" + campaignTitle + "&quot;)'></button>

ksa 18.11.2015 14:14

Цитата:

Сообщение от tvixa
Сократила пример
campaignTitle = '"Турандот"';

<button type='button' class='btn btn-xs' title='Редактировать акцию' onclick='clickEditCampaing("+ campaignId + ", &quot;" + campaignTitle + "&quot;)'></button>

Если верить подсветке, он у тебя уже неправильный... :(

ksa 18.11.2015 14:17

Давай таки отталкиваться от этого...
Цитата:

Сообщение от tvixa
$("#tbody-active-campaings").append();

Какую строку ты имеешь? Какие переменные чему равны? И куда их значения собираешься вставлять?
Т.е. что в итоге нужно получить? Какую строку?

tvixa 18.11.2015 14:45

Это функция редактирования. При клике функции передаются соответствующие параметры.
Рассмотрим на примере 1-2 параметров. Я получаю xml и мне возвращается такое значение с кавычкой: <title>test&quot;</title>
Далее я пишу
var campaignTitle = ($(campaign).find("title").text());

То есть присваиваю переменной полученное значение, затем мне нужно это значение передать в функцию для дальнейшей обработки, что я и пытаюсь сделать вот тут
onclick='clickEditCampaing("+ campaignId + ", &quot;" + campaignTitle + "&quot;, &quot;" + campaingDescr + "&quot;,&quot;" + campaingFullDescr + "&quot;,&quot;" + conditionsDescr + "&quot;,&quot;" + mrctId + "&quot;,&quot;" + campStart + "&quot;,&quot;" + campStop + "&quot;,&quot;" + bannerTitle + "&quot;, &quot;" + link + "&quot;)'


Если кавычки во всех этих переменных отсутствуют скрипт отрабатывает корректно, функция принимает параметры и выводит в определенных input-ах.

Но вот засада, параметры разделены кавычкой и запятой именно в таком формате они передаются в функцию, но если в тексте который вернулся есть кавычка начинается путаница с границами параметров. Где заканчивается и начинается

ksa 18.11.2015 15:27

tvixa, давай поучимся делать тестовые примеры...
Цитата:

Сообщение от tvixa
Я получаю xml и мне возвращается такое значение с кавычкой: <title>test&quot;</title>

Т.е.
var campaign='<title>test&quot;</title>';

Так?
Цитата:

Сообщение от tvixa
Далее я пишу
var campaignTitle = ($(campaign).find("title").text());

Т.е.
var campaign='<title>test&quot;</title>';
var campaignTitle = ($(campaign).find("title").text());

Так?
Цитата:

Сообщение от tvixa
затем мне нужно это значение передать в функцию для дальнейшей обработки, что я и пытаюсь сделать вот тут
onclick='clickEditCampaing("+ campaignId + ", &quot;" + campaignTitle + "&quot;, &quot;" + campaingDescr + "&quot;,&quot;" + campaingFullDescr + "&quot;,&quot;" + conditionsDescr + "&quot;,&quot;" + mrctId + "&quot;,&quot;" + campStart + "&quot;,&quot;" + campStop + "&quot;,&quot;" + bannerTitle + "&quot;, &quot;" + link + "&quot;)'

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

ksa 18.11.2015 15:39

Вот это тестовый пример

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='http://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
$(function(){
	var str='&quot;Test&quot;';
	$('body').append('<button onclick="alert('+"'"+str+"'"+')">Test</button>');
});
</script>
</head>
<body>
</body>
</html>

Его можно взять за основу и сделать свой тестовый пример... ;)


Часовой пояс GMT +3, время: 07:28.