Avatar billede mungojerrie Nybegynder
23. maj 2004 - 20:30 Der er 9 kommentarer og
1 løsning

find del af tekst og lav til link

Hej

Jeg vil gerne lave en function som giver mig mulighed for at lave "rigtige" links, altså med <a href="link"></a>. Funktionen skal kontrolllere for links i en vilkårlig tekst. Altså:

$mintekst = "en masse tekst og så lige en link: www.dr.dk";

findlinks($mintekst);

giver retur: en masse tekst og så lige en link: <a href="www.dr.dk">www.dr.dk</a>

Håber nogen kan hjælpe......
Avatar billede mungojerrie Nybegynder
23. maj 2004 - 20:31 #1
ja, jeg kan se at eksperten har den funktionalitet jeg søger :-)
Avatar billede phliplip Nybegynder
23. maj 2004 - 20:33 #2
Den her bruger jeg.. som regel ;)

------
function formaterTekst($tekst, $target = "_blank", $tags = "<b><i>") {
    $tekst = trim($tekst);
    $tekst = ucfirst($tekst);
    $tekst = strip_tags($tekst, $tags."<b><i>");
    $tekst = str_replace("&", "&amp;", $tekst);
    $tekst = str_replace("mailto:", "", $tekst);
    $tekst = formaterTekst_url($tekst, $target);
    $tekst = formaterTekst_email($tekst);
    $tekst = formaterTekst_orden_slutbogstav($tekst);
    $tekst = str_replace("  ", "&nbsp; ", $tekst);
    $tekst = str_replace("\t", "&nbsp;&nbsp;&nbsp; ", $tekst);
    $tekst = str_replace("\r", "", $tekst);
    $tekst = str_replace("\n", "<br>", $tekst);
    return $tekst;
}

function formaterTekst_url($tekst, $target) {
    $indsaet_attribut = "";
    if ($target) $indsaet_attribut = " target=\"".$target."\"";
    $tekst = formaterTekst_udvid($tekst);
    $tekst = preg_replace ("/(ftp|http|https|telnet|news|nntp|file|irc):\/\/([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "<a href=\"\\1://\\2\"".$indsaet_attribut."><span class=\"hyperlink\">\\1://\\2</span></a>", $tekst);
    $tekst = preg_replace ("/(\s|tp\:|\(|\[|\&gt;)(www\.)([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "\\1<a href=\"http://\\2\\3\"".$indsaet_attribut."><span class=\"hyperlink\">\\2\\3</span></a>", $tekst);
    $tekst = preg_replace ("/(\s|tp\:|\(|\[|\&gt;)(ftp\.)([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "\\1<a href=\"ftp://\\2\\3\"".$indsaet_attribut."><span class=\"hyperlink\">\\2\\3</span></a>", $tekst);
    return formaterTekst_reducer($tekst);
}

function formaterTekst_email($tekst) {
    $tekst = formaterTekst_udvid($tekst);
    $tekst = preg_replace ("/([\s|\"])([\w|\.|\-|_]+)@([\w||\-|_]+)\.([\w|\.|\-|_]+)/i", "\\1<a href=\"mailto:\\2@\\3.\\4\"><span class=\"hyperlink\">\\2@\\3.\\4</span></a>", $tekst);
    return formaterTekst_reducer($tekst);
}


function formaterTekst_orden_slutbogstav($tekst) {
    $tekst = preg_replace ("/([\'\"\)\]\.\,\?\!]+)\">/i", "\">", $tekst);
    $tekst = preg_replace ("/([\'\"\)\]\.\,\?\!]+)\" (target|class)=\"/i", "\" \\2=\"", $tekst);
    $tekst = preg_replace ("/([\'\"\)\]\.\,\?\!]+)<\/a>/i", "</a>\\1", $tekst);
    return $tekst;
}

function formaterTekst_udvid($tekst) {
    return " ".$tekst." ";
}

function formaterTekst_reducer($tekst) {
    return substr($tekst, 1, -1);
}
----
Avatar billede phliplip Nybegynder
23. maj 2004 - 20:34 #3
Og så kører du bare:
echo(formaterTekst($mintekst));
Avatar billede jakoba Nybegynder
23. maj 2004 - 20:37 #4
Avatar billede phliplip Nybegynder
23. maj 2004 - 20:44 #5
Min er en rewrite til 'dansk' af en tidligere version af TagSter !
Avatar billede mungojerrie Nybegynder
23. maj 2004 - 21:40 #6
Jeg har modificeret den lidt så den ser sådan ud, men den har det problem at skriver jeg eksempelvis kun denne tekst: "www.dr.dk", så bliver det ikke til noget link.

    function tagster_url($str, $target=null) {
            $ins_str = "";
            if ($target) $ins_str .= " target=\"_blank\"";
            $str = preg_replace ("/(ftp|http|https|telnet|news|nntp|file|irc):\/\/([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "<a href=\"\\1://\\2\"".$ins_str.">\\1://\\2</a>", $str);
            $str = preg_replace ("/(\s|tp\:|\(|\[|\&gt;)(www\.)([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "\\1<a href=\"http://\\2\\3\"".$ins_str.">\\2\\3</a>", $str);
            $str = preg_replace ("/(\s|tp\:|\(|\[|\&gt;)(ftp\.)([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "\\1<a href=\"ftp://\\2\\3\"".$ins_str.">\\2\\3</a>", $str);
            return $str;
    }
Avatar billede mungojerrie Nybegynder
24. maj 2004 - 10:36 #7
nogen kommentarer til ovenstående ??  :-)
Avatar billede sostack Nybegynder
24. maj 2004 - 11:50 #8
I de to linier med $str = preg_replace ("/(\s|tp\:| , kan du prøve at ændre \s til \b, så virker det her.

//sostack
Avatar billede mungojerrie Nybegynder
24. maj 2004 - 20:43 #9
super :-)
Avatar billede phliplip Nybegynder
25. maj 2004 - 19:34 #10
Øhh... tak ellers :-S
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