从相对URL Android JSoup转换后的绝对URL不正确

亚历山大混合

我正在尝试解析来自各个站点的导航链接。

我遇到了一个特定站点的问题,该站点使用以开头的相对格式。./这是注释中带有相关参数值的代码段:

// url = http://megatokyo.com/strip/1456
// selector = ".next a"
// ele = <a href="./strip/1457">Next</a>
// attr = "href"
Element ele = doc.select(selector).get(index);
ele.setBaseUri(url);
String absoluteUrl = ele.absUrl(attr).trim().replaceAll("\n", "");

Jsoup返回:

http://megatokyo.com/strip/strip/1457

实际上,真正的链接是:

http://megatokyo.com/strip/1457

根据我的理解,Jsoup在此处提供了指向./当前目录(http://megatokyo.com/strip/的正确链接,这意味着该锚点在该网站上的处理不正确。但是,Chrome,Firefox和IE都解析相对URL而不是指向下一个带/strip/strip/1457在其他情况下,有什么方法可以纠正此行为而又不会破坏相对URL?

弗雷德里克·克莱恩(Frederic Klein)

问题:

如果您查看html源代码的标题,则会发现:

<head>
    ...
    <base href="http://megatokyo.com/" />
</head>

这是什么意思?

对于文档中的所有相对URL,它将用作基础(因此这是当前目录./)。请参阅:http//www.w3schools.com/tags/tag_base.asp

使固定:

Jsoup已准备就绪,可以检测到该<base>标记,并且ele.absUrl("href")会(并且确实已经对其进行了测试)返回标记,http://megatokyo.com/strip/1457但是您正在使用覆盖正确的设置ele.setBaseUri(url);,因此请删除此行代码。

如果要自己设置正确的基准,只需解析<base>元素的头部即可

String url = "http://megatokyo.com/strip/1456";

Element base = doc.select("head > base[href]").first();

String baseUrl = base!=null ? base.attr("href") : url;

Element ele = doc.select("#comic > div > div.navcontrols.top > ul > li.next > a").first();
ele.setBaseUri(baseUrl);

System.out.println(ele.attr("abs:href"));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章