Quick Tip: 06. zamieniamy URL na link
gru 4, 2009 Quick Tips
Dzisiaj prosty przykład jak w tekście zamienić url na link, czyli np. użytkownik wpisuje:
“Zapraszam na moją stronę http://gasior.net.pl”
a my wyświetlając ten tekst chcemy otrzymać coś takiego
“Zapraszam na moją stronę <a href=”http://gasior.net.pl”>http://gasior.net.pl</a>”
Z pomocą przychodzą wyrażenia regularne:
protected string ConvertUrlsToLinks(string msg)
{
Regex r = new Regex("(http://[^ ]+)");
return r.Replace(msg, "<a href=\"$1\">$1</a>");
}
Jeżeli zachodzi taka potrzeba możemy ten sam efekt uzyskać w JavaScripcie:
var objRegExp = /(http:[^ ]+)/g; var convertedValue = msg.replace(objRegExp, "<a href='$1'>$1</a>");
EDIT:
w nawiązaniu do słusznej uwagi z komentarza (użytkownik apl) podaję poprawioną, dokładniejszą metodę:
var reg = @"((www\.|(http|https)+\:\/\/)[_.a-z0-9-]+\.[a-z0-9\/_:@=.+?,##%&~-]*[^.|\'|\# |!|\(|?|,| |>|<|;|\)])";
Regex r = new Regex(reg, RegexOptions.IgnoreCase);
return r.Replace(msg, "<a href=\"$1\">$1</a>").Replace("href=\"www", "href=\"http://www");

Grudzień 7th, 2009 at 17:25
Jak na pierwsze podejście OK, ale na dłuższą metę takie rozwiązanie nie będzie wystarczające. Co w takich przypadkach:
1. „Przejdź na stronę http://pajacyk.pl, a następnie kliknij brzuszek pajacyka.”
2. „Otrzymuję komunikat o treści “Nie można odnaleźć hosta http://example.com” i nie wiem co z tym zrobić.”
3. „Adres hosta nie powinien zaczynać się od przedrostka http://, usuń go i będzie OK.”
Grudzień 8th, 2009 at 23:11
@apl – miał to być jedynie prosty przykład jak taki “problem” można rozwiązać ale uwaga jak najbardziej słuszna. Problemem jest to, że url kończy się przecinkiem i jest on dodawany jako element linku – podana metoda zakłada, że url kończy się spacją.
Dodałem bardziej rozbudowaną metodę – ta już radzi sobie z podanym przez Ciebie przykładem.
Luty 25th, 2010 at 16:30
Przydatne :)
1) poprawiony wyrażeniu brakuje dwa razy A-Z po a-z dla parametrów np z get=BlaBla
2) (http|https) – można skrócić do (https?)