日期:2014-05-16  浏览次数:20570 次

Jsoup对HTML 文档清理

?

jsoup 在提供强大的 API 同时,人性化方面也做得非常好。在做网站的时候,经常会提供用户评论的功能。有些用户比较淘气,会搞一些脚本到评论内容中,而这些脚本可能会破坏整个页面的行为,更严重的是获取一些机要信息,例如 XSS 跨站点攻击之类的。

jsoup 对这方面的支持非常强大,使用非常简单。看看下面这段代码:

清单 5.
 String unsafe = "<p><a href='http://www.oschina.net/' onclick='stealCookies()'> 
 开源中国社区 </a></p>"; 
 String safe = Jsoup.clean(unsafe, Whitelist.basic()); 
 // 输出 : 
 // <p><a href="http://www.oschina.net/" rel="nofollow"> 开源中国社区 </a></p>

jsoup 使用一个 Whitelist 类用来对 HTML 文档进行过滤,该类提供几个常用方法:

表 1. 常用方法:
方法名简介
none() 只允许包含文本信息
basic() 允许的标签包括:a, b, blockquote, br, cite, code, dd, dl, dt, em, i, li, ol, p, pre, q, small, strike, strong, sub, sup, u, ul, 以及合适的属性
simpleText() 只允许 b, em, i, strong, u 这些标签
basicWithImages() 在 basic() 的基础上增加了图片
relaxed() 这个过滤器允许的标签最多,包括:a, b, blockquote, br, caption, cite, code, col, colgroup, dd, dl, dt, em, h1, h2, h3, h4, h5, h6, i, img, li, ol, p, pre, q, small, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, u, ul

如果这五个过滤器都无法满足你的要求呢,例如你允许用户插入 flash 动画,没关系,Whitelist 提供扩展功能,例如 whitelist.addTags("embed","object","param","span","div"); 也可调用 addAttributes 为某些元素增加属性。