繁体   English   中英

如何防止 Jsoup 删除锚元素的“href”属性?

[英]How do I prevent Jsoup from removing 'href' attribute of anchor element?

我想使用 Jsoup 来清理输入,同时仍然允许具有“href”属性的锚元素保持不变; 但是,我发现无论我做什么, Jsoup.clean() 都会删除“href”属性。 测试代码如下:

    public static void main(String[] args)
    {
        final String foo = "<a href='/foo/'>Foo</a>";
        final String cleansedOutput = Jsoup.clean(foo, Safelist.relaxed().addTags("a").addAttributes("a", "href"));

        System.out.println("foo: " + foo);
        System.out.println("cleansedOutput: " + cleansedOutput);
    }

代码的输出如下:

foo: <a href='/foo/'>Foo</a>
cleansedOutput: <a>Foo</a>

如您所见,即使如上所示,我明确告诉 Jsoup 保留锚元素和“href”属性(我最初在添加addTags() Safelist.relaxed() ) 和addAttributes() ;无论如何,他们都删除了该属性)。

难道我做错了什么? 或者这是 Jsoup 中的错误? (很难相信这是一个错误,因为他们的单元测试很早就会失败。)

从文档Jsoup.clean(java.lang.String,org.jsoup.safety.Safelist)

请注意,由于此方法不使用基本 href URL 来解析具有相对 URL 的属性,因此这些 URL 将被删除,除非输入 HTML 包含标签。 如果您希望保留这些,请改用 clean(String html, String baseHref, Safelist) 方法,并启用 Safelist.preserveRelativeLinks(boolean)。

String html = "<a href='/foo/'>Foo</a>";
Safelist safelist = Safelist.relaxed();
safelist.preserveRelativeLinks(true);
String clean = Jsoup.clean(html, "http://", safelist);
System.out.println(clean);

会打印出来

<a href="/foo/">Foo</a>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM