2009-05-05 11 views
1

私は、ウェブページのテキストを取得さんは、いくつかの本当でhttps://stackoverflow.com/questionsをしましょうとのリンク作らことができます。私の元のページを知るウェブページにある不完全なURLから完全なURLを作成するにはどうすればよいですか?

 
    /questions 
    /tags 
    /questions?sort=votes 
    /questions?sort=active 
    randompage.aspx 
    ../coolhomepage.aspx 

はこのへのリンクを解決するための.NETの方法があるhttps://stackoverflow.com/questionsでしたか?

 
    https://stackoverflow.com/questions 
    https://stackoverflow.com/tags 
    https://stackoverflow.com/questions?sort=votes 
    https://stackoverflow.com/questions?sort=active 
    https://stackoverflow.com/questions/randompage.aspx 
    https://stackoverflow.com/coolhomepage.aspx 

ブラウザがリンクを解決するのに十分なような種類です。

===========================アップデート - Davidのソリューションを使用する:

 
    'Regex to match all <a ... /a> links 
    Dim myRegEx As New Regex("\<\s*a     (?# Find opening <a tag)   " & _ 
          ".+?href\s*=\s*['""]  (?# Then all to href=' or "")  " & _ 
          "(?<href>.*?)['""]  (?# Then all to the next ' or "") " & _ 
          ".*?\>     (?# Then all to >)    " & _ 
          "(?<name>.*?)\<\s*/a\s*\> (?# Then all to </a>)    ", _ 
          RegexOptions.IgnoreCase Or _ 
          RegexOptions.IgnorePatternWhitespace Or _ 
          RegexOptions.Multiline) 

    'MatchCollection to hold all the links that are matched 
    Dim myMatchCollection As MatchCollection 
    myMatchCollection = myRegEx.Matches(Me._RawPageText) 

    'Loop through all matches and evaluate the value of the href attribute. 
    For i As Integer = 0 To myMatchCollection.Count - 1 
     Dim thisLink As String = "" 
     thisLink = myMatchCollection(i).Groups("href").Value() 
     'This checks for Javascript and Mailto links. 
     'This is not complete. There are others to check I just haven't encountered them yet. 
     If thisLink.ToLower.StartsWith("javascript") Then 
      thisLink = "JAVASCRIPT: " & thisLink 
     ElseIf thisLink.ToLower.StartsWith("mailto") Then 
      thisLink = "MAILTO: " & thisLink 
     Else 
      Dim baseUri As New Uri(Me.URL) 

      If Not thisLink.ToLower.StartsWith("http") Then 
       'This is a partial URL so we will assume that it's relative to our originating URL 
       Dim myUri As New Uri(baseUri, thisLink) 
       thisLink = "RELATIVE LOCAL LINK: RESOLVED: " & myUri.ToString() & " ORIGINAL: " & thisLink 
      Else 
       'The link starts with HTTP, determine if part of base host or is outside host. 
       Dim ThisUri As New Uri(thisLink) 
       If ThisUri.Host.ToLower = baseUri.Host.ToLower Then 
        thisLink = "INSIDE COMPLETE LINK: " & thisLink 
       Else 
        thisLink = "OUTSIDE LINK: " & thisLink 
       End If 
      End If 

     End If 

     'I'm storing the found links into a Generic.List(Of String) 
     'This link has descriptive text added to it. 
     'TODO: Make collection to hold only unique internal links. 
     Me._Links.Add(thisLink) 
    Next 

答えて

2

このような意味ですか?

Uri baseUri = new Uri("http://www.contoso.com"); 
Uri myUri = new Uri(baseUri, "catalog/shownew.htm"); 

Console.WriteLine(myUri.ToString()); 

サンプルははい、これは私が必要としたものであるhttp://msdn.microsoft.com/en-us/library/9hst1w91.aspx

+0

から来ています。これは、異なる場所から発信されたURLで機能します。私はそれを実装した方法を示すために質問を更新します。ありがとう! – rvarcher

1

あなたは、サーバー側を意味する場合

string url = ResolveUrl("~/questions"); 
0

私はあなたがこの文脈での「決意」によって何を意味するか理解しない、しかし、あなたはベースHTML要素を挿入しようとすることができます、あなたはResolveUrl()使用することができます。あなたはブラウザがそれをどのように扱うか尋ねたので、

"<base>タグは、ページ上のすべてのリンクのデフォルトアドレスまたはデフォルトターゲットを指定します。

http://www.w3schools.com/TAGS/tag_base.asp

関連する問題