Html是否可以对可能或不可能被干净编码的内容进行编码?
问题描述:
我正在使用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.
用户输入:
& < < > >
输出IF编码:
&amp; &lt; < > &gt;
不会显示正确
输出如果不是编码:
& < < > >
这不会验证更正tly
答
我不认为你会找到一个解决方案这将自动工作的内容是编码而不是 - 我可以看到你可以可靠地做到这一点的唯一方法是指定内容是否已被编码。否则,您在某些情况下会遇到问题,例如
Some plain text mentioning > being the syntax for >
而且
<p>Some HTML mentioning that &amp; is the syntax for ></p>
您可以尝试检测是否有编码的内容或HTML内容的存在,但我上面显示的例子,这不会总是犯错。
答
如果是我,我只会替换<
和>
个字符,而使其他所有元素保持不变。
答
您可以先进行解码用户输入,然后重新编码结果。 这样,如果输入的某些值已经被编码,它们将被解码,并且您将能够对所有内容进行编码。
& < < > >
- >解码输入,你会得到:
& < < > >
- >重新编码的一切,你会得到:
& < < > >
这会在提及HTML实体的纯文本内容上失败,因为如果不是这个意图,它会被解码。 – Richard 2010-06-17 10:05:34
你说得对。我想这取决于他会得到什么样的输入。 – Shimrod 2010-06-17 10:08:25