2011-02-04 61 views
5

我有以下腳本,它對它接收的某些值進行編碼,但似乎沒有對雙引號進行編碼。在POST之前對HTML進行編碼

如何在發佈前正確編碼整個值?

function htmlEncode(value){ 
    return $('<div/>').text(value).html(); 
} 

上述腳本給我這個:

&lt;p&gt;Test&amp;nbsp; &lt;span style="color: #ffffff"&gt;&lt;strong&gt;&lt;span style="background-color: #ff0000"&gt;1+1+1=3&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; 

我需要它給我這個:

&lt;p&gt;Test&amp;nbsp; &lt;span style=&quot;color: #ffffff&quot;&gt;&lt;strong&gt;&lt;span style=&quot;background-color: #ff0000&quot;&gt;1+1+1=3&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; 

編輯:後續問題: Encoded HTML in database back to page

+2

它看起來像你正在試圖讓客戶端提交到服務器之前,使一些文本HTML安全。不要這樣做。使內容HTML在系統出路的時候安全,而不是在途中(特別是不在客戶端,它可能被篡改) – Quentin 2011-02-04 14:24:27

+0

爲什麼你需要在客戶端上執行JS? – troutinator 2011-02-04 14:25:41

+0

爲什麼你想讓它給你'"`?除非你打算將數據插入到一個屬性值中(你使用字符串而不是使用DOM或其​​他合理的API來混合使用),那麼你只需要使用6個字節,而且只需要使用6個字節並使其更難讀取。 – Quentin 2011-02-04 14:25:42

回答

7

你不應該」試着用JavaScript編碼東西。

你應該在服務器端對它進行編碼。

任何可以用JavaScript完成的事情都可以撤消。

如果您還檢查它是否在服務器上進行了編碼,則可以使用JavaScript進行編碼,但請記住:可以禁用JavaScript。

4

喬治說的是真的。 但是,如果你必須對客戶端的字符串進行編碼,我建議你使用JavaScript的encodeURIComponent()

1

您可以使用JS這個模塊,而無需jQuery的:

htmlencode

-1

使用轉義(STR)在客戶端

HttpUtility.UrlDecode(STR,System.Text.Encoding.De故障);在服務器端

它爲我工作。

0

我有一個類似的問題。我只是在javascript中使用替換方法。這裏有一篇很好的文章可供閱讀:http://www.w3schools.com/jsref/jsref_replace.asp

基本上,替換方法所做的就是將它所創建的字符替換爲您替換的字符。

所以這樣的:

var str=' " That " '; 
str = str.replace(/"/g,'&quot;'); 

一旦你登錄到您的瀏覽器的控制檯,您將得到類似

&quot; That &quot; 

而且這樣的:

var str=' " That " '; 
str = str.replace(/"/g,'blahblahblah'); 

一旦登錄這到你的瀏覽器的控制檯,你會得到像

blahblahblah That blahblahblah 
相關問題