2010-06-17 65 views
0

我正在使用ASP.Net 4.0與MVC 2.我收到的用戶內容可能已經或可能不是Html Encoded。我讀過http://weblogs.asp.net/scottgu/archive/2010/04/06/new-lt-gt-syntax-for-html-encoding-output-in-asp-net-4-and-asp-net-mvc-2.aspx這很有趣,但我需要的是一種確保內容不用雙重編碼進行編碼的方法。我無法控制輸入過程。Html是否可以對可能或不可能被幹淨編碼的內容進行編碼?

E.g.

用戶輸入:

&amp; &lt; < > &gt; 

輸出IF編碼:

&amp;amp; &amp;lt; &lt; &gt; &amp;gt; 

不會顯示正確

輸出如果不是編碼:

&amp; &lt; < > &gt; 

這不會驗證更正tly

回答

0

我不認爲你會找到一個解決方案這將自動工作的內容是編碼而不是 - 我可以看到你可以可靠地做到這一點的唯一方法是指定內容是否已被編碼。否則,您在某些情況下會遇到問題,例如

Some plain text mentioning &gt; being the syntax for > 

而且

<p>Some HTML mentioning that &amp;amp; is the syntax for &gt;</p> 

您可以嘗試檢測是否有編碼的內容或HTML內容的存在,但我上面顯示的例子,這不會總是犯錯。

1

如果是我,我只會替換<>個字符,而使其他所有元素保持不變。

2

您可以先進行解碼用戶輸入,然後重新編碼結果。 這樣,如果輸入的某些值已經被編碼,它們將被解碼,並且您將能夠對所有內容進行編碼。

&amp; &lt; < > &gt; 

- >解碼輸入,你會得到:

& < < > > 

- >重新編碼的一切,你會得到:

&amp; &lt; &lt; &gt; &gt 
+0

這會在提及HTML實體的純文本內容上失敗,因爲如果不是這個意圖,它會被解碼。 – Richard 2010-06-17 10:05:34

+0

你說得對。我想這取決於他會得到什麼樣的輸入。 – Shimrod 2010-06-17 10:08:25

相關問題