Avatar billede zaittam Nybegynder
27. maj 2007 - 07:35 Der er 3 kommentarer

Klikbart link

Jeg bruger denne funktion til at gøre alle links i en tekst klikbare:



$text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)',    '<a href="\\1">link</a>', $text);
$text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)',    '\\1<a href="http://\\2">link</a>', $text);
$text = eregi_replace('([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})',    '<a href="mailto:\\1">link</a>', $text);

Hvordan kan det være, at hvis linket er det første i teksten, og at det har formen www.xxxxx.dk (og ikke fks. http://xxxxx.dk), at det så ikke bliver gjort klikbart?

Skriver jeg "h www.xxxxx.dk", så virker det, men ikke hvis jeg kun skriver "www.momex.dk" i teksten.

Jeg kører teksten igennem en del andre funktioner bagefter, men altså ikke noget, der skulle slå et link ihjel..
Avatar billede zaittam Nybegynder
27. maj 2007 - 08:50 #1
Fandt ud af det.. Tilføjer en tekst i starten af variablen før jeg kører funktionen, og fjerner den igen bagefter..

Hører gerne fra andre, der har et bedre svar - måske ændringer i selve funktionen..
Avatar billede jakobdo Ekspert
27. maj 2007 - 08:52 #2
Prøv at test denne funktion:

function text_url($str, $target, $css_class)
{
    $ins_str = "";
    if ($css_class)
        $ins_str .= " class=\"".$css_class."\"";
    if ($target)
        $ins_str .= " target=\"".$target."\"";
   
    $str = preg_replace_callback ("/(ftp|http|https|telnet|news|nntp|file|irc):\/\/([a-z0-9~#&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\%\^\{\}]+)/i", create_function('$matches','if( strlen($matches[2]) > 25 ) $name = substr($matches[2],0,25) . ".."; else $name = $matches[2]; return "<a".$ins_str." href=\"{$matches[1]}://{$matches[2]}\">$name</a>";'),$str);
    $str = preg_replace_callback ("/(\s|tp\:|\(|\[|\&gt;)(www\.)([a-z0-9~#&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\%\^\{\}]+)/i",                    create_function('$matches','if( strlen($matches[3]) > 25 ) $name = substr($matches[3],0,25) . ".."; else $name = $matches[3]; return "<a".$ins_str." href=\"http://$matches[2]$matches[3]\">$name</a>";'), $str);
    $str = preg_replace_callback ("/(\s|tp\:|\(|\[|\&gt;)(ftp\.)([a-z0-9~#&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\%\^\{\}]+)/i",                    create_function('$matches','if( strlen($matches[3]) > 25 ) $name = substr($matches[3],0,25) . ".."; else $name = $matches[3]; return "<a".$ins_str." href=\"ftp://$matches[2]$matches[3]\">$name</a>";'), $str);

  return $str;
}
Avatar billede zaittam Nybegynder
28. maj 2007 - 08:08 #3
Det er stadig det samme - den gør det ikke, når linket har formen "www.xxxxx.dk" og linket står som det første i teksten. Hvis man skriver "Hej www.xxxxx.dk" - så er der ingen problemer.

Det er da mærkeligt.. Ingen der kan løse det?
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