如何检查内容是否是纯文本?

时间:2011-04-23 12:55:50

标签: java html parsing validation text

我有一个纯文本区域,我只接受来自用户的纯文本。我想确保用户不在文本区域中放置任何标记。我还假设用户可以使用不同的语言发布。那么,在服务器端(使用java)和客户端(使用jquery)验证内容的最佳方法是什么。

在这方面的任何帮助将不胜感激。

更新:如果问题不够明确,我很抱歉。为了简单起见,这就是我想要做的 - 我让用户在textarea中输入文本(这里没有富文本框)。对于文本区域中的每个双新行,我想在HTML页面中显示一个段落。我该如何正确地做到这一点?

2 个答案:

答案 0 :(得分:4)

验证HTML内容的用户输入毫无意义。您可以在网页上重新显示此用户输入时转义HTML。由于您提到您在服务器端使用Java,因此您可能使用JSP作为视图技术,因此最好知道您可以使用JSTL <c:out>标记和{{3}函数在打印到输出之前转义HTML。

E.g。在重新显示用户控制的输入时:

<c:out value="${somebean.sometext}" />

或重新显示用户提交的请求参数时:

<input type="text" name="foo" value="${fn:escapeXml(param.foo)}" />

这种方式,例如<script>alert('xss')</script>将作为&lt;script&gt;alert(&#39;xss&#39;)&lt;/script&gt;打印到HTML输出,因此在字面上以最终用户输入的方式显示在HTML中。


如果您确实坚持要对此进行验证,那么您最终可能会为fn:escapeXml()抓取一个HTML解析器。

String text = request.getParameter("text");

if (!text.equals(Jsoup.parse(text).text())) {
    // There was HTML in the text.
}

更新根据您实际要针对HTML白名单清理输入以删除潜在恶意代码的评论。您也可以使用Jsoup执行此操作,另请参阅Jsoup

String sanitized = Jsoup.clean(text, Whitelist.basic());

Whitelist#basic()中指定了{{1}}的允许元素。

答案 1 :(得分:0)

如果你要阻止它的HTML标记,你可以使用正则表达式,如果它看到一个雪佛龙(&lt;)

就会抛出错误