相对URL 如何转成绝对URL路径?

boyyao 2010-10-02 09:46:21
假设html源码中包含如下url
/aaa/aaa.htm
bbb/bbb.htm
../ccc/ccc.htm
./ddd/ddd.htm

http://www.xxx.com/ccc/ccc.htm

假设有一个基础url
http://www.yyy.com/yyy/

我希望上面的路径经过转换后得到如下的路径:
http://www.yyy.com/aaa/aaa.htm
http://www.yyy.com/yyy/bbb/bbb.htm
http://www.yyy.com/ccc/ccc.htm
http://www.yyy.com/yyy/ddd/ddd.htm
http://www.xxx.com/ccc/ccc.htm

我希望不要用太多的if语句来判断。不知道是否有简便的方法来处理这种路径问题?
...全文
391 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
boyyao 2010-10-03
  • 打赏
  • 举报
回复
用如下的方法解决了,并且用正则替换
Uri baseUri = new Uri("http://www.jiojio.cn");
Uri absoluteUri = new Uri( baseUri, "/images/logo.png");
absoluteUri.ToString();// http://www.jiojio.cn/images/logo.png
非常感谢楼上的各位。

public static string ConvertToAbsoluteUrls(string html)
{
return Regex.Replace(html, "(href|src)=[\"'](?<url>.*?)[\"']", new MatchEvaluator(ComputeReplacement));
}
public static String ComputeReplacement(Match m)
{
Uri absoluteUri = new Uri(baseUri, m.Groups["url"].ToString());
return String.Format("{0}=\"{1}\"", m.Groups["1"].ToString(), absoluteUri.ToString());
}
boyyao 2010-10-02
  • 打赏
  • 举报
回复
上面手误。吧<a href="text2">test2</a> 应该是<a href="test2">test2</a>
boyyao 2010-10-02
  • 打赏
  • 举报
回复
wuyq11 你好。感谢你的再次回复。我用RegexBuddy测试你的正则。用一段html测试无法得到任何url路径。不知道是否有误。我对正则非常头痛,只能用个基础。
另外这个正则看上去只能在原始url上加上一个固定的字符串。比如http://www.a.com/
但实际上基础url可能已经包含了一层或者多层路径。比如 http://www.a.com/aaa/这样的形式
我希望遇上从根目录开始的路径就丢弃基础url的aaa/来添加

可能我描述的有点问题。总之需要达到如下效果
第一个字符串 http://www.a.com/a/
网页源码中可能出现的url比如:
<a href="/test1">test1</a>
<a href="text2">test2</a>
我希望得到如下结果:
http://www.a.com/test1
http://www.a.com/a/test2

虽然用正则提取说所有url然后判断前缀可以得到同样的结果,但我总觉得这是一个下策。
wuyq11 2010-10-02
  • 打赏
  • 举报
回复
正则获取路径,实现替换regex.replace
Regex.Replace(input,"(?is)(?<=<(a|img)\b.*?(href|src)="")","http://www.a.com/");

boyyao 2010-10-02
  • 打赏
  • 举报
回复
回复1楼。好像这个方法只能针对磁盘路径,比如我用
MessageBox.Show(Path.Combine("https://www.bbs.net/bbs/", "/aaa/a.htm")); 得到的是/aaa/a.htm 而不是我期待的https://www.bbs.net/aaa.a.htm

回复2楼。我不是在做asp.net程序。我是在走一个类似爬虫的东西。需要吧网页中的一些url转成绝对路径
wuyq11 2010-10-02
  • 打赏
  • 举报
回复
http://www.test.com/testweb/default.aspx
Request.Url.AbsolutePath: /testweb/default.aspx
Request.Url.AbsoluteUri: http://www.test.com/testweb/default.aspx
Request.Url.Host: www.test.com
绝对路径
VirtualPathUtility.ToAbsolute("~/") = /
HttpRuntime.AppDomainAppVirtualPath = /
Request.ApplicationPath = /
Page.ResolveUrl("~") = /
threenewbee 2010-10-02
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/en-us/library/fyy7a5kt(VS.71).aspx

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧