假设html源码中包含如下url
/aaa/aaa.htm
bbb/bbb.htm
../ccc/ccc.htm
./ddd/ddd.htmhttp://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语句来判断。不知道是否有简便的方法来处理这种路径问题?

解决方案 »

  1.   

    http://msdn.microsoft.com/en-us/library/fyy7a5kt(VS.71).aspx
      

  2.   

    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("~") = / 
      

  3.   

    回复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转成绝对路径
      

  4.   

    正则获取路径,实现替换regex.replace
    Regex.Replace(input,"(?is)(?<=<(a|img)\b.*?(href|src)="")","http://www.a.com/");
      

  5.   

    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然后判断前缀可以得到同样的结果,但我总觉得这是一个下策。
      

  6.   

    上面手误。吧<a href="text2">test2</a> 应该是<a href="test2">test2</a>
      

  7.   

    用如下的方法解决了,并且用正则替换
    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());
            }