Avatar billede philiosphreak Nybegynder
27. august 2004 - 12:18 Der er 5 kommentarer

Insætning af Mailto Link på Emails i en fri tekst

Jeg har en artikel tekst som "kan" indeholde en eller flere email adresser i ren tekst. Det jeg skal bruge er en funktion der søger artikel teksten igennem, finder eventuelle email adresser og indsætter et html Mailto: link på disse emails.

I denne funktion gåes der ud fra at det sidste space inden @ er starten på email og det første efter @ er afslutningen.

Eksempel:
"Artikel tekst. xxxxx xxxx xxx xx xxxx xxx x person@domain.dk xxx xx xx xx xx xx xxx x" skulle altså blive til "Artikel tekst. xxxxx xxxx xxx xx xxxx xxx x <a href="mailto:person@domain.dk">person@domain.dk</a> xxx xx xx xx xx xx xxx x".

Artikel teksten kan, som sagt, indeholde en eller flere email adresser eller den kan være uden email adresser overhovedet.

Funktionen skal kunne tage højde for både en, flere eller ingen adresser.

Endvidere, om mail adressen er gyldig eller ej, behøves der ikke tages stilling til. Dermed ment, at søgning efter DNS MX record ikke er påkrævet. Der er udelukkende tale om en insættelse af html link på email adresser

Hvis du kan lave funktionen eller pege mig i retningen af et script der kan, ville jeg blive meget glad
Avatar billede detox Nybegynder
27. august 2004 - 12:26 #1
tagster_lib.php
http://www.ljweb.com/usefulscripts/

Brug:

$tekst = tagster_email($tekst);
Avatar billede anhansen Nybegynder
27. august 2004 - 12:29 #2
med ereg_replace. Jeg kan ikke helt huske php syntax for regulære udtryk.
Men noget i stil med.
ereg_replace('[\w\d]*@[\w\d]*.(\w){3}', '<a href="mailto:{1}">{1}</a>', artikelTekst);
Avatar billede anhansen Nybegynder
27. august 2004 - 12:33 #3
hmm.. ikke helt korrekt kan jeg så se...
tagsters version er :
  $str = preg_replace ("/([\s\"])([\w\.\-_]+)@([\w\-_]+)\.([\w\.\-_]+)/i", "\\1<a href=\"mailto:\\2@\\3.\\4\"".$ins_class.">\\2@\\3.\\4</a>", $str);
Avatar billede detox Nybegynder
27. august 2004 - 12:51 #4
Da en e-mailadresse må indeholde '+', hvert fald i persondelen er denne nok mere præcis:

$tekst = preg_replace ("/([\s\"\'])([\w\.+_-]+)@([\w_-]+)\.([\w\._-]{2,3})([\s\"\'])/i", "$1<a href=\"mailto:$2@$3.$4\">$2@$3.$4</a>$5", $tekst);
Avatar billede Slettet bruger
31. august 2004 - 20:47 #5
Hvis du er villig til at acceptere, at ting, der bare indeholder et @, men faktisk ikke er email-adresser bliver lavet til links (Lidt lige som i Outlook Express i de udgaver, jeg har brugt.) så er følgende meget simple regex nok:

$nytekst=preg_replace("/(\S+@\S+)/", "<a href='mailto:\\1'>\\1</a>", $tekst);

Den tager ganske simpelt et @ med alle de omstående ikke-blanktegn, ud til første blanktegn før og efter (eller hvis der ikke er blanktegn, tager den til starten/enden af strengen). Det eneste krav, den stiller til adresserne er, at der skal være ikke-blanktegn både før og efter @.

PS. Tak til detox for at ride min kæphest for mig, når jeg ikke selv har tid ;-)
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