2009-03-04 46 views
5

我在ASP.NET MVC應用程序中有一個textarea,用戶可以輸入一些文本。當我向用戶顯示文本時,我使用Html.Encode來防止惡意輸入。問題是用戶可以輸入西班牙語,也許他輸入añoEncode將其轉換爲a&#241o。我如何防止這種情況?爲安全編碼HTML輸入時,如何避免編碼國際字符如Ñ或ñ?

編輯:在生成的HTML,我看到:

<a href="a1-'a1'-Cama&amp;#241;o?sort=estadisticas#241;o">a1 'a1' Cama&amp;#241;o</a> 

在頁面我都這樣了,這時候顯示是正確的後來:

<b>a1 'a1' Cama&#241;o</b> 

首先是生成此方法:

<%= Html.RouteLink(Html.Encode(Model.NAME), ...... %> 

和第二這樣的:

<%= Html.Encode(Model.NAME)%> 

所以我的猜測是問題是與Html.RouteLink

+0

您的抱怨是編碼國際字符,還是用戶看到編碼的字符而不是他們輸入的字符?如果是後者,那麼「偶然編碼兩次」的答案是正確的。如果沒有,請告訴我們。 – Eddie 2009-03-04 17:29:23

回答

2

所以我的猜測是,這個問題是與Html.RouteLink

沒錯。你不應該對進入RouteLink的參數進行HTML編碼,它會生成HTML本身,所以會照顧你逃跑。

5

你是否意外地編碼了兩次

例如,如果您在服務器端以編程方式設置Textarea的內容,它將在渲染時自動編碼內容。

嘗試查看textarea的原始HTML輸出。

正常情況下,當你在textarea內容中放置轉義符時,它應該在解碼後的textarea中顯示出來(顯示爲預期的非轉義字符)。

所以這可能是一個意外Html.Encode兩次不必要的問題。

如果您的數據已經被轉義,您可能希望在將其放入textarea之前解除(Html.Decode)。

+0

這裏也一樣。 +1 – Tomalak 2009-03-04 16:59:48