如何使Jsoup白名单接受某些属性内容
我正在将Jsoup与轻松的白名单一起使用。看起来很完美,但我想保留嵌入的图像标签,例如<img alt="" src="data:;base64
。
有没有办法修改白名单以接受这些img?
:
如果使用,Whitelist.relaxed().addProtocols("img","src","data")
则不会删除那些img标签。但是它接受“
data:”之后的任何内容,如果src内容以“ data:; base64”开头,我只想保留它们。jsoup是否可能?
回答:
您可以扩展白名单并覆盖isSafeAttribute以执行自定义检查。由于无法直接扩展Whitelist.relaxed(),因此您必须复制一些代码以设置相同的列表:
public class RelaxedPlusDataBase64Images extends Whitelist { public RelaxedPlusDataBase64Images() {
//copied from Whitelist.relaxed()
addTags("a", "b", "blockquote", "br", "caption", "cite", "code", "col",
"colgroup", "dd", "div", "dl", "dt", "em", "h1", "h2", "h3", "h4", "h5", "h6",
"i", "img", "li", "ol", "p", "pre", "q", "small", "strike", "span",
"sub", "sup", "table", "tbody", "td", "tfoot", "th", "thead", "tr", "u",
"ul");
addAttributes("a", "href", "title");
addAttributes("blockquote", "cite");
addAttributes("col", "span", "width");
addAttributes("colgroup", "span", "width");
addAttributes("img", "align", "alt", "height", "src", "title", "width");
addAttributes("ol", "start", "type");
addAttributes("q", "cite");
addAttributes("table", "summary", "width");
addAttributes("td", "abbr", "axis", "colspan", "rowspan", "width");
addAttributes("th", "abbr", "axis", "colspan", "rowspan", "scope", "width");
addAttributes("ul", "type");
addProtocols("a", "href", "ftp", "http", "https", "mailto");
addProtocols("blockquote", "cite", "http", "https");
addProtocols("cite", "cite", "http", "https");
addProtocols("img", "src", "http", "https");
addProtocols("q", "cite", "http", "https");
}
@Override
protected boolean isSafeAttribute(String tagName, Element el, Attribute attr) {
return ("img".equals(tagName)
&& "src".equals(attr.getKey())
&& attr.getValue().startsWith("data:;base64")) ||
super.isSafeAttribute(tagName, el, attr);
}
}
由于您没有提供要解析的代码或要消毒的HTML,因此我没有对此进行测试。
以上是 如何使Jsoup白名单接受某些属性内容 的全部内容, 来源链接: utcz.com/qa/416400.html