2017-02-14 210 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假定他們爲多個參數,並拋出錯誤。我搜索了很多其他的建議在div中添加數據並檢索其內部HTML的其他Stackoverflow帖子,但在我的情況下可能。

感謝

+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

No no。The我顯示的字符串是一個隨機選擇,json數據可以有',',''''和'''的任意組合。 – user31782

0

您可以用單引號或任何其他符號替換雙引號,以便它在雙引號內工作。 你可以用String.replace(/["]+/g,"'")這樣做,這將用單引號替換字符串中的雙引號,reg-ex中的g告訴它使用所有字符串。

你也可以使用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因爲'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來演示解決方案。