簡體   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