Avatar billede flim Nybegynder
23. marts 2005 - 22:43 Der er 13 kommentarer og
2 løsninger

Link og mail automatisk

Jeg søger et lille script eller noget kode, som automatisk laver mail-adresser og webadresser om til link.

Der må være nogle der har lavet det før - ved bare ikke præcist hvad jeg skal søge efter.

Synes det er en genial funktion, så håber der er et par stykker der kan hjælpe.

På forhånd tak
Avatar billede barklund Nybegynder
23. marts 2005 - 22:48 #1
Jeg har sådan én her:

function format($c) {
    $a = "a-z0-9";
    $ap = "a-z0-9/";
    $e = "a-z0-9_%#=-";
    $x = "\.,;:_\?\+=^*~!#%&\\\(\)\[\]-";
    $patterns = array(
        "¤(http://[$ap$x]*[$ap])¤i",
        "¤([$a][$e]+(\.[$a][$e]+)*@[$a][$e]+(\.[$a][$e]+)*\.[a-z]{2,6})¤i"
    );
    $replace = array(
        "<a href='\\1'>\\1</a>",
        "<a href='mailto:\\1'>\\1</a>"
    );
    return preg_replace($patterns, $replace, $c);
}

Prøv den :)

Hvis den også skal fange adresser, der ikke er skrevet med http:// foran men bare www., så må du lige sige til :)

--
Morten Barklund
Avatar billede flim Nybegynder
23. marts 2005 - 22:50 #2
barklund - uha, en med www ville selvfølgelig være utrolig lækkert. Så kan du få flere points hvis det er...

Og skal lige høre.

$c er det den streng man checker??
Avatar billede cyberdudes Nybegynder
23. marts 2005 - 22:54 #3
ved ikke helt om det er dette du mener.

Men noget i den her retning:

if(substr_count($email, "@") > 0 && substr_count($email, ".") > 0)
{
  echo "<a href="mailto:$email">$email</a>";
}

Ved ikke helt om det er noget i den retning du leder efter. Kan også laves mere elegant med noget regular expressions for at tjekke om det er en gyldig email adresse...

Håber det hjalp...
Avatar billede flim Nybegynder
23. marts 2005 - 22:54 #4
Skal også lige høre hvordan den rent faktisk fungerer.

Hvor skal denne funktion ind henne, eller hvor skal den køres?

I øjeblikket bruger jeg str_replace når [b] osv skal erstattes med <b>.

Men denne her kan jeg ikke helt se hvornår den skal køres ?!

Håber du kan hjælpe mig lidt ud her ;-)
Avatar billede flim Nybegynder
23. marts 2005 - 22:56 #5
Det skal fungere på samme måde som herinde :-)

Folk skriver en masse tekst, og hvis de så skriver en mail som navn@domæne.dk så skal det selv laves om til et link til en mail-adresse.

Tror barklund er inde på det rigtige - mangler bare lidt mere instruktion
Avatar billede fommy Nybegynder
23. marts 2005 - 23:01 #6
Jeg bryder lige ind =)

    function string_tagster($str) {
        $str = " ".$str." ";
        $str = eregi_replace("([[:space:]{()\"'\[~#=;\&?\_])((ftp|http|https|telnet|news|nttp|nntp|file):\/\/[a-z0-9~#%@æøå\&\(\):;=\?\/\.,_-]+(\\[|\\]|[a-z0-9~#%@æøå\*\&:;.,=\?!'\|\/_\+-])+)", "\\1<A HREF=\"\\2\" TARGET=\"_blank\">\\2</A>", $str);
        $str = eregi_replace("([[:space:]{()\"'\[~#;\&?\_])(www\.[a-z0-9~#%@æøå\&\(\):;=\?!'\/\.,_-]+(\\[|\\]|[a-z0-9~#%@æøå\*\&:;.,=\?!'\|\/_\+-])+)", "\\1<A HREF=\"http://\\2\" TARGET=\"_blank\">\\2</A>", $str);
        $str = eregi_replace("([[:space:]{()\"'\[~#=;\&?\_])(ftp\.[a-z0-9~#%@æøå\&\(\):;=\?!'\/\.,_-]+(\\[|\\]|[a-z0-9~#%@æøå\&:;.,=\?!'\|\/_\+-])+)", "\\1<A HREF=\"ftp://\\2\" TARGET=\"_blank\">\\2</A>", $str);
        $str = eregi_replace("(mail:|[[:space:]{()\"'\[~#;\&?])([_\.0-9a-z-]+@([_\.0-9a-z-]+)+\.[a-z]{2,4})","\\1<A HREF=\"mailto:\\2\">\\2</A>", $str);
        return substr($str, 1);
    }

    function format_post2 ($str) {
        $str = htmlentities($str);
        $str = str_replace("&quot;", "\"", $str);
        $str = string_tagster($str);
        $str = ereg_replace("'</A>", "</A>'", $str);
        $str = ereg_replace("'\" TARGET=\"_blank\">", "\" TARGET=\"_blank\">'", $str);
        $str = ereg_replace("  ", "&nbsp; ", $str);
        $str = str_replace("\\t", "&nbsp;&nbsp;&nbsp; ", $str);
        $str = str_replace("\\r", "", $str);
        $str = str_replace("\\n", "<BR>", $str);

        return $str;
    }

Den her kan fange alverdens forskellige typer links.
Du bruger den ved at includere koden og sætte string_tagster ind foran det du vil have skrevet ud.
Eks. hvor du trækker data ud af en database: <? echo string_tagster($row["tabel"]); ?>
Avatar billede coderdk Praktikant
23. marts 2005 - 23:04 #7
Og jeg bruger denne include:

<?php

    function url2link($txt)
    {
        $username = "[a-z0-9_\-]+";
        $password = "[a-z0-9_\-!#]+";
        $host = "[a-z0-9\-]+\.[a-z0-9\-\.]+";
        $port = "\d{1,5}";
        $path = "\/[a-z0-9\/\-\.\(\)\%]*";
        $querystr = "\?[a-z0-9&=\-\.%\(\)]+";
        $proto = "(https?|ftp):\/\/";
        $url = "$host(:$port)?($path($querystr)?)?";
        $protodomain = "/$proto(($username(:$password)?@)?$url)/i";
        $domain = "/(^| )(www\.$url)/im";
        $protomail = "/mailto:($username@$host)/i";
        $mail = "/(^| )($username@$host)/im";
        $replacements = array(
                $protodomain => "<a href=\"\\0\" target=\"_blank\">\\2</a>"
                ,$domain => "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>"
                ,$protomail => "<a href=\"\\0\">\\1</a>"
                ,$mail => "\\1<a href=\"mailto:\\2\">\\2</a>"
            );
        return preg_replace( array_keys( $replacements ), array_values( $replacements ), $txt );
    }

?>

Den fanger det meste ;)
Avatar billede barklund Nybegynder
23. marts 2005 - 23:12 #8
Du kalder den blot som:

$mintekst = format($mintekst);

De andre metoder er sikkert også fine nok - der findes lige så mange metoder, som der findes programmører. Og den perfekte metode er for lang, til at nogen gider bruge den :)

Så find dig én, som du synes om - og hold dig bare til den :)

--
Morten Barklund
Avatar billede flim Nybegynder
23. marts 2005 - 23:20 #9
fommy - jeg brugte din, og den ser ud til at virke.

Lige et spørgsmål. Skal begge funktioner kaldes for teksten for at den både checker for mail og webadresser?

Hvis ja - hvordan gøres det?

Og til Jer andre. Smid et svar - I har jo alle bidraget til en løsning
Avatar billede barklund Nybegynder
23. marts 2005 - 23:25 #10
Hvis du vil kalde to funktioner er det jo bare:

$txt = funk1(funk2($txt));

Men her et i hvert fald et svar :)

--
Morten Barklund
Avatar billede flim Nybegynder
23. marts 2005 - 23:34 #11
Jamen det virker jo nogenlunde...

Bortset fra at min almindelige HTML-kode ikke bliver fortolket...

Jeg har noget <img src..> som bare bliver skrevet som almindelig tekst og ikke tolket.

Det er jo noget temmelig skidt lige her. Kan det fikses?
Avatar billede coderdk Praktikant
23. marts 2005 - 23:34 #12
Ingen point her, ellers tak ;)
Avatar billede barklund Nybegynder
23. marts 2005 - 23:41 #13
Nu har du jo valgt at bruge en funktion, der jo netop laver <img> om til de rette html-entities, så man kan skrive netop dette - lige som herinde. Der ser ud som om, det ikke bliver fortolket - men i virkeligheden omskrives det til noget andet.

Men så lad være med at bruge denne funktion - hvis den ikke lever op til formålet :)
Avatar billede flim Nybegynder
23. marts 2005 - 23:42 #14
Hehe - i orden der barklund.

Jeg roder lidt med det og ser om jeg kan finde frem til en fornuftig løsning.

På forhånd tak
Avatar billede barklund Nybegynder
23. marts 2005 - 23:47 #15
Hm, nu fik fommy jo ingen point.

gommy, sig til hvis du vil have halvdelen af mine - altså kun dem fra dette spørgsmål :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester