2017-02-14 3 views
0

я получил следующую строку из моего AJAX запроса:Как избежать HTML строки, имеющие несколько двойных кавычек

As per json doc, "quotes must be escaped " 

Это хранится в data.description и вложен в шаблоне, как:

'<a href="#"' + 'data-title="' + data.description + '"></a>' 

Значение data-title используется в качестве заголовка для плагина lightbox. Я попробовал следующую функцию:

var HtmlEncode = function(s) { 
      var el = document.createElement("div"); 
      el.innerText = el.textContent = s; 
      s = el.innerHTML; 
      return s; 
     } 

как:

'<a href="#"' + 'data-title="' + HtmlEncode(data.description) + '"></a>' 

Теперь, поскольку data.description содержит несколько цитат Javascript себя принимает их как множественный аргумент и бросает ошибку. Я искал много других сообщений Stackoverflow, которые предлагают добавить данные в div и получить внутренний HTML-код, но это возможно в моем случае.

Благодаря

+0

http://stackoverflow.com/questions/7753448/how-do-i-escape-quotes-in-html-attribute-values ​​ –

ответ

1

Изменение только цитаты, которые являются такими же, как будут окружающие data-title. Как это:

var description = data.description.replace(/"/g, "'"); 
var template = '<a href="#"' + 'data-title="' + description + '"></a>'; 
+0

Я использовал его, но он дает тот же результат. И я не понимаю, почему изменение '' '' '' '' '' 'будет выходить из строки html. – user31782

+0

@ user31782 Это не сбудет, но это решит проблему! См. Пример! –

+0

Нет. строка, показанная мной, была случайным выбором. Данные json могли иметь любую комбинацию ',', '' 'и' ''. – user31782

0

Вы можете заменить двойные кавычки в строке с одинарными кавычками или любым другим символом для того, чтобы работать в двойных кавычках. вы можете сделать это с помощью String.replace(/["]+/g,"'"), это заменит двойные кавычки в строке одиночной цитатой, g в reg-ex сообщит ей использовать всю строку.

вы также можете подделать его, используя 2 одинарные кавычки, подобные этому String.replace(/["]+/g,"''"), и это будет поддельные двойные кавычки для вас.

var HtmlEncode = function(s) { 
     return s.replace(/["]+/g,"''"); 
    } 
0

Решение 1

Экранируйте его заменить и регулярное выражение:

var HtmlEncode = function(s) { 
    return s.replace(/"/g, '\\"').replace(/'/g, "\\'"); 
} 
'<a href="#" data-title="' + HtmlEncode(data.description) + '"></a>' 

Решение 2

Пусть JQuery делает это для вас (только если вы используете Это).

var tpl = $('<a href="#"></a>'); 
tpl.data('title', data.description); 
+0

Ваш первый метод дает ошибку, потому что 'HtmlEncode (data .description) 'является проблематичным из-за двойных кавычек в' data.description'. Но ваш второй метод дал мне еще одну идею сделать '$ (" # mydiv "). append (data.secription)' – user31782

+0

Где он дает ошибку? Проверьте это: http://codepen.io/DaniloPolani/pen/LxqXOz – Grork

+0

Вы добавили одинарные кавычки там как «Как для json doc», кавычки должны быть экранированы «Но ответ json, который у меня есть, не имеет их, и я не знаю, сколько двойных кавычек оно имеет. – user31782

0

Попробуйте заменить кавычки эквивалентами сущности HTML, после чего вы сможете безопасно использовать его по атрибутам.

var desc = data.description.replace(/'/g, "&#39;").replace(/"/g, "&#34;"); 

'<a href="#"' + 'data-title="' + desc + '"></a>' 

Для получения более подробной информации нажмите здесь Fiddle.

Смежные вопросы