【问题标题】:JSoup.clean() is not preserving relative URLsJSoup.clean() 不保留相对 URL
【发布时间】:2016-06-04 10:24:06
【问题描述】:

我试过了:

Whitelist.relaxed();
Whitelist.relaxed().preserveRelativeLinks(true);
Whitelist.relaxed().addProtocols("a","href","#","/","http","https","mailto","ftp");
Whitelist.relaxed().addProtocols("a","href","#","/","http","https","mailto","ftp").preserveRelativeLinks(true);

它们都不起作用:当我尝试清理相对 URL 时,例如 <a href="/test.xhtml">test</a>,我删除了 href 属性 (<a>test</a>)。

我正在使用 JSoup 1.8.2。

有什么想法吗?

【问题讨论】:

    标签: html-parsing jsoup


    【解决方案1】:

    问题很可能源于对 clean 方法的调用。如果您提供基本 URI,则所有内容都应按预期工作:

    String html = ""
            + "<a href=\"/test.xhtml\">test</a>"
            + "<invalid>stuff</invalid>"
            + "<h2>header1</h2>";
    String cleaned = Jsoup.clean(html, "http://base.uri", Whitelist.relaxed().preserveRelativeLinks(true));
    System.out.println(cleaned);
    

    以上工作并保持相关链接。但是使用 String cleaned = Jsoup.clean(html, Whitelist.relaxed().preserveRelativeLinks(true)) 时,链接会被删除。

    注意documentation of Whitelist.preserveRelativeLinks(true)

    注意,在处理相对链接时,输入文档必须有 解析时设置适当的基本 URI,以便链接的协议 可以确认。无论保存亲属的设置如何 links 选项,该链接必须可根据基本 URI 解析到 允许的协议;否则该属性将被删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-30
      • 1970-01-01
      • 2014-02-07
      • 2018-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多