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:

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)+\:\/\/)[&#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");

3 Responses to “Quick Tip: 06. zamieniamy URL na link”

  1. aplNo Gravatar Says:

    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ąsiorNo Gravatar Says:

    @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. faziNo Gravatar Says:

    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?)


Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>