2010-03-30 28 views
1

我有一個網頁,有一個像這樣就可以定義一個textarea:的JavaScript和JQuery - 編碼的HTML

<textarea id="myTextArea" rows="6" cols="75"></textarea> 

有機會的話,用戶可以在此字段中輸入單引號和雙引號。舉例來說,我一直在測試與下面的字符串:

Just testin' using single and double "quotes". I'm hoping the end of this task is comin'. 

此外,用戶可以輸入HTML代碼,我寧願避免。無論如何,我將這個textarea的內容傳遞給Web服務。在我發送它之前,我必須用JavaScript編碼textarea的內容。目前,我嘗試以下:

var contents $('<div/>').text($("#myTextArea").val()).html(); 
alert(contents); 

我所期待的內容顯示

Just testin&#39; using single and double &#34;quotes&#34;. I&#39;m hoping the end of this task is comin&#39;. 

取而代之的是,原始的字符串被打印出來。除了雙引號之外,還有很多實體需要考慮。因此,我假定在傳遞HTML之前會有一種編碼方式。有人可以告訴我如何做到這一點?

謝謝

+1

忘掉JavaScript中的HTML編碼。做它服務器端。你不能相信客戶,所以根據客戶的要求,這是一個巨大的XSS漏洞。 – Quentin 2010-03-30 13:15:19

+0

使用_.escape來自http://underscorejs.org/#escape – rjdmello 2014-06-19 07:37:31

回答

0

使用:

var contents = $("<div/>").text($("#myTextArea").val()).text(); 
alert(contents); 

你中顯示,而在HTML內容的文本內容。

+0

在這裏不是缺少的東西嗎? – Nayan 2014-06-18 06:56:03

+0

@Rafiqunnabi有,但現在我修好了。謝謝。 :-) – Prutswonder 2014-06-19 06:52:17

+0

您錯過了=操作符:) – Nayan 2014-06-19 08:57:51

3

如果您發送到Web服務,那麼您大概會對它們進行URL編碼(作爲POST的一部分,例如通過表單提交Ajax)。這將處理任何必要的轉義。另一端的服務負責正確解釋輸入字符串。如果該服務不接受HTML標記,則服務的工作是執行必要的實體編碼(或其他任何想要的編碼)。

如果服務不對此承擔責任,則對客戶端的錯誤和惡意攻擊者開放。所以這真的是另一端的問題。