您可以扩展白名单并覆盖
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", "strong",
"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,因此我没有对此进行测试.