You're here: Snippet Directory » Microsoft .NET (154)
Language:

Relative Links in absolute Links umwandeln

Language: Deutsch
Programming Language: ASP.NET
Published by: Thomas
Last Update: 12/2/2007
Views: 1

License: Public Domain

Description

Es gibt Fälle, in denen man keine relativen Links setzen sollte - zum Beispiel wenn man Inhalte einer Website, die sonst in HTML gerendert werden, als RSS-Feed bereit stellt.

Wenn man keine direkte Möglichkeit der Einflussnahme auf den generierten HTML-Code hat, kann man sich mit folgendem Snippet behelfen und das Ganze automatisiert regeln:

Code

1 protected override void Render(HtmlTextWriter writer) 2 { 3 TextWriter output = new StringWriter(); 4 base.Render(new HtmlTextWriter(output)); 5 string html = output.ToString(); 6 Regex r = new Regex("(<(?:.*?)\\s)href\\s*=([\\s\"'])*/?([^\\2]+?)\\2((?:.*?)>)", RegexOptions.IgnoreCase); 7 html = r.Replace(html, new MatchEvaluator(RelativeUrlMatch)); 8 writer.Write(html); 9 } 10 11 private string RelativeUrlMatch(Match m) 12 { 13 string url = m.Groups[3].Value; 14 if (!url.StartsWith("http://")) 15 { 16 if (!url.StartsWith("../")) 17 { 18 url = "http://" + Request.Url.Host + "/" + url; 19 return m.ToString().Replace("/" + m.Groups[3].Value, url); 20 } 21 else 22 { 23 int removeDirCount = url.Split(new string[] { "../" }, 999, StringSplitOptions.None).Length + 1; 24 url = url.Replace("../", string.Empty); 25 string[] baseDirectories = Path.GetDirectoryName(Request.Path).Split('\\'); 26 string newBaseUrl = string.Empty; 27 for (int i = 0; i <= baseDirectories.Length - removeDirCount; i++) 28 { 29 newBaseUrl = newBaseUrl + baseDirectories[i] + "/"; 30 } 31 url = "http://" + Request.Url.Host + newBaseUrl + url; 32 return m.ToString().Replace(m.Groups[3].Value, url); 33 } 34 } 35 else 36 { 37 return m.ToString(); 38 } 39 }

No comments avaiable

Add a comment

Name *  

Email (won't be displayed) *    

Website  

Comment *  

Sicherheitscode Security Code *    

RSS