我在ASP.NET MVC应用程序中有一个textarea,用户可以在其中键入一些文本。当我向用户显示文本时,我使用Html.Encode
来防止恶意输入。问题是用户可以键入西班牙语,也可以键入año
,Encode
将其转换为año
。我该如何防止这种情况?
编辑:在生成的HTML中,我看到了:
<a href="a1-'a1'-Cama&#241;o?sort=estadisticas#241;o">a1 'a1' Cama&#241;o</a>
稍后在页面中我有了这个,这次显示是正确的:
<b>a1 'a1' Camaño</b>
第一种是以这种方式生成的:
<%= Html.RouteLink(Html.Encode(Model.NAME), ...... %>
和第二个像这样:
<%= Html.Encode(Model.NAME)%>
所以我的猜测是问题出在Html.RouteLink
。
答案 0 :(得分:5)
您是否意外编码两次?
例如,如果您在服务器端以编程方式设置Textarea的内容,它将在渲染时自动编码内容。
尝试查看textarea的原始HTML输出。
通常当你将转义符放在textarea内容中时,它应该在textarea中显示解码(显示为预期的非转义字符)。
所以这可能是Html.Encode偶然发生两次意外问题。
如果您的数据已被转义,您可能需要在将其放入textarea之前取消转义(Html.Decode)。
答案 1 :(得分:2)
所以我的猜测是问题在于Html.RouteLink
是的。您不应该对进入RouteLink的参数进行HTML编码,它会生成HTML本身,因此会为您提供转义。