Quick Tip: 06. zamieniamy URL na link

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:

[sourcecode language=”csharp”]
protected string ConvertUrlsToLinks(string msg)
{
Regex r = new Regex("(http://[^ ]+)");
return r.Replace(msg, "<a href="$1">$1</a>");
}
[/sourcecode]

Jeżeli zachodzi taka potrzeba możemy ten sam efekt uzyskać w JavaScripcie:

[sourcecode language=”csharp”]
var objRegExp = /(http:[^ ]+)/g;
var convertedValue = msg.replace(objRegExp, "<a href=’$1′>$1</a>");
[/sourcecode]

EDIT:
w nawiązaniu do słusznej uwagi z komentarza (użytkownik apl) podaję poprawioną, dokładniejszą metodę:
[sourcecode language=”csharp”]
var reg = @"((www.|(http|https)+://)[&#95;.a-z0-9-]+.[a-z0-9/&#95;:@=.+?,##%&~-]*[^.|’|# |!|(|?|,| |>|<|;|)])";
Regex r = new Regex(reg, RegexOptions.IgnoreCase);
return r.Replace(msg, "<a href="$1">$1</a>").Replace("href="www", "href="http://www");
[/sourcecode]

3 Responses

  1. apl 7 grudnia 2009 / 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.”

  2. Łukasz Gąsior 8 grudnia 2009 / 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.

  3. fazi 25 lutego 2010 / 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?)

Comments are closed.