Java 如何制作Jsoup白名单以接受某些属性内容

Java 如何制作Jsoup白名单以接受某些属性内容,java,jsoup,sanitization,html-sanitizing,Java,Jsoup,Sanitization,Html Sanitizing,我将Jsoup与放松的白名单一起使用。它看起来很完美,但我想保留嵌入的图像标签,如 是否有办法修改白名单以同时接受那些img 编辑: 如果我使用Whitelist.relaxed().addProtocols(“img”、“src”、“data”)则不会删除这些img标记。但它接受“data:”之后的任何内容,如果src内容以“data:;base64”开头,我只想保留它们。是否可以使用jsoup?您可以扩展白名单和覆盖以执行自定义检查。由于无法直接扩展Whitelist.relaxed(),因

我将Jsoup与放松的白名单一起使用。它看起来很完美,但我想保留嵌入的图像标签,如

是否有办法修改白名单以同时接受那些img

编辑


如果我使用
Whitelist.relaxed().addProtocols(“img”、“src”、“data”)
则不会删除这些img标记。但它接受“data:”之后的任何内容,如果src内容以“data:;base64”开头,我只想保留它们。是否可以使用jsoup?

您可以扩展白名单和覆盖以执行自定义检查。由于无法直接扩展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,因此我没有对其进行测试。

对于我来说,我甚至不必将其列入白名单来保留它。丹尼尔:我正在使用jsoup 1.7.2,其中只包含jsoup.clean(…,Whitelist.relaxed()。任何形式的img都会被删除。