Avatar billede d.kryger Praktikant
07. august 2007 - 15:18 Der er 61 kommentarer og
1 løsning

Automatisk link ved post

Hej eksperter.

Jeg har et forum hvor folk kan skrive, og her kunne det være fedt at links automatisk blev aktive...

Altså hvis jeg skriver "www.eksperten.dk/artikler" så bliver det automatisk til et link, uden at brugerne skal gøre andet.

Kan nogen hjælpe?
Avatar billede jakobdo Ekspert
07. august 2007 - 15:32 #1
Du kan lege med denne kode:

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 d.kryger Praktikant
07. august 2007 - 16:02 #2
Kan du evt. forklare lidt om hvad der sker i koden?
Jeg er ikke den store kode-haj :)
Avatar billede jakobdo Ekspert
08. august 2007 - 08:37 #3
Den finder links i $str og laver dem om links som du skriver.
Du kan også angive $target som f.eks. "_blank" og angive en CSS klasse som skal bruges til linksne.
Avatar billede olebole Juniormester
08. august 2007 - 13:11 #4
<ole>

- og en egentlig forklaring af koden vil fylde 6-8 bogsider ... mindst  ;o)

/mvh
</bole>
Avatar billede jakobdo Ekspert
08. august 2007 - 13:25 #5
olebole: Gider du ikke kontakte mig på: jakobdo (at) hotmail (dot) com ?
Jeg har en ting eller 2 jeg gerne vil vende med dig.
Avatar billede d.kryger Praktikant
08. august 2007 - 13:47 #6
Nu har jeg prøvet med nedenstående - men der er ikke nogle af de to links som virker... Kan I se om jeg gør noget forkert?

<html>

<head>
<title>Test</title>
</head>

<body>

<?php

    $str = "Efter denne tekst skal der være et link - http://www.eksperten.dk/artikler/ - men jeg vil også gerne have at dette link virker - www.eksperten.dk/artikler/";
    $target = "_blank";

    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;
    }

    print $str;

?>

</body>

</html>
Avatar billede nielle Nybegynder
08. august 2007 - 13:50 #7
Mjaa, du har jo slet ikke noget kald af din funktion text_url().
Avatar billede olebole Juniormester
08. august 2007 - 13:56 #8
jakobdo >> sendt  ;o)
Avatar billede jakobdo Ekspert
08. august 2007 - 13:57 #9
Test dette:

<html>

<head>
<title>Test</title>
</head>

<body>

<?php
    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;
    }
    $txt = "Efter denne tekst skal der være et link - http://www.eksperten.dk/artikler/ - men jeg vil også gerne have at dette link virker - www.eksperten.dk/artikler/";
   
    echo text_url($txt,"_blank",'default');
?>

</body>

</html>
Avatar billede d.kryger Praktikant
08. august 2007 - 14:02 #10
Det ser som sådan fint ud, bortset fra at den slette noget af linket når den skriver det igen. Ovenstående tekst blev til:
Efter denne tekst skal der være et link - www.eksperten.dk/artikler.. - men jeg vil også gerne have at dette link virker -eksperten.dk/artikler/

Det er dog de rigtige links som der bliver linket til!
Avatar billede jakobdo Ekspert
08. august 2007 - 14:04 #11
Det var for at forkorte meget lange links, jeg i sin tid fik tilføjet den funktionalitet.
Ret 25 til længden du ønsker et link max må være.
Ellers kan man også helt fjerne det.
Avatar billede jakobdo Ekspert
08. august 2007 - 14:07 #12
Jeg har også lært her via eksperten i sin tid: http://www.eksperten.dk/spm/606355
Avatar billede d.kryger Praktikant
08. august 2007 - 14:13 #13
OK, det løste det første link. Men det andet link mister www. foran... Kan det også undgåes?
Avatar billede jakobdo Ekspert
08. august 2007 - 16:04 #14
Prøv at se koden i aktion her: http://www.codebreaker.dk/exp/790633exp.php
Avatar billede olebole Juniormester
08. august 2007 - 16:07 #15
Hvad med teskten:
    "... følgende filer kan ikke uploades: *.asp, *.php og *.doc"

Det vil blive til links, hvis eksperten.dk/artikler/ skulle blive til et link (og læg mærke til, at det heller ikke sker her på Eksperten)
Avatar billede d.kryger Praktikant
09. august 2007 - 08:17 #16
jokobdo: Det er lige præcis sådan jeg gerne vil have det! Tak for hjælpen. Læg et svar og du får point.
Avatar billede jakobdo Ekspert
09. august 2007 - 08:51 #17
Svar!
Avatar billede jakobdo Ekspert
09. august 2007 - 09:20 #18
Takker for point.
Avatar billede d.kryger Praktikant
10. januar 2008 - 15:18 #19
Nu hvor koden bare kører derudaf, har jeg lige et spørgsmål. Hvis der er et punktum efter linket, så kommer det også med i linket.

Eks.:
$txt = "Link til www.dr.dk.";

Det bliver til:
Link til www.dr.dk./

Kan man ikke få den til at glemme alt om det punktum?
Avatar billede jakobdo Ekspert
10. januar 2008 - 17:18 #20
Du kunne overveje at bruge: trim($link, '.');
Avatar billede d.kryger Praktikant
30. januar 2008 - 08:19 #21
Hvor/hvordan skal jeg gøre det?
Avatar billede jakobdo Ekspert
30. januar 2008 - 08:30 #22
Inden du kalder URL format funktionen.
Avatar billede d.kryger Praktikant
30. januar 2008 - 08:53 #23
Hvis jeg forstår dig ret, så skal jeg gøre det som det første når jeg henter $txt ud fra databasen?

Men hvad sker der hvis $txt er lig med: "Dette er en tekst, hvor jeg gerne vil linke til www.dr.dk. Men jeg kunne også godt tænke mig en is. Dette er en tekst, hvor jeg gerne vil linke til www.dr.dk, men jeg kunne også godt tænke mig en is."
Avatar billede jakobdo Ekspert
30. januar 2008 - 09:03 #24
Så skal du til at bygge funktionen med ind i funktionen: text_url()
Den skal med ind i disse 3 kald: $str = preg_replace_callback....
Avatar billede d.kryger Praktikant
30. januar 2008 - 09:18 #25
Det forstå jeg ikke meget af, desværre...

Mine kode ser sådan ud:
function text_url($str, $target, $css_class)
{
    $ins_str = "";
    if($css_class)
        $ins_str .= " class=\"".$css_class."\"";
    if($target)
        $ins_str .= " target=\"".$target."\"";
    $str = text_expand($str);
    $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 text_reduce($str);
}

function text_expand($str)
{
    return " ".$str." ";
}

function text_reduce($str)
{
    return substr($str, 1, -1);
}

print text_url($profiltekst,"_blank",'default');

Kan du evt. skrive hvor det skal sættes ind?
Avatar billede jakobdo Ekspert
30. januar 2008 - 20:23 #26
Hvis du efter:
([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)
tilføjer:
([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\-\+\[\]\|\*\$\^\{\}])
Så burde det fjerne det sidste punktum.
Avatar billede d.kryger Praktikant
31. januar 2008 - 10:42 #27
Det har jeg nu prøvet, men linket ser stadig sådan ud hvis man ser det som html:
Dette er en tekst, hvor jeg gerne vil linke til <a href="http://www.dr.dk." class="default" target="_blank">www.dr.dk.</a> Men jeg kunne også godt tænke mig en is.

Jeg ville jo godt have at det så sådan ud:
Dette er en tekst, hvor jeg gerne vil linke til <a href="http://www.dr.dk" class="default" target="_blank">www.dr.dk</a>. Men jeg kunne også godt tænke mig en is.

Min kode ser sådan ud:
function text_url($str, $target, $css_class)
{
    $ins_str = "";
    if($css_class)
        $ins_str .= " class=\"".$css_class."\"";
    if($target)
        $ins_str .= " target=\"".$target."\"";
    $str = text_expand($str);
    $str = preg_replace ("/(ftp|http|https|telnet|news|nntp|file|irc):\/\/([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\-\+\[\]\|\*\$\^\{\}])/i", "<a href=\"\\1://\\2\"".$ins_str.">\\1://\\2</a>", $str);
    $str = preg_replace ("/(\s|tp\:|\(|\[|\&gt;)(www\.)([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)([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~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\-\+\[\]\|\*\$\^\{\}])/i", "\\1<a href=\"ftp://\\2\\3\"".$ins_str.">\\2\\3</a>", $str);
    return text_reduce($str);
}

function text_expand($str)
{
    return " ".$str." ";
}

function text_reduce($str)
{
    return substr($str, 1, -1);
}
Avatar billede jakobdo Ekspert
31. januar 2008 - 19:51 #28
Test denne version af text_url();

function text_url($str, $target, $css_class)
{
    $ins_str = "";
    if($css_class)
        $ins_str .= " class=\"".$css_class."\"";
    if($target)
        $ins_str .= " target=\"".$target."\"";
    $str = text_expand($str);
    $str = preg_replace ("/(ftp|http|https|telnet|news|nntp|file|irc):\/\/([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+[a-z0-9~#%@&:;=!',_æøå\(\)\?\/\-\+\[\]\|\*\$\^\{\}]+)/i", "<a href=\"\\1://\\2\"".$ins_str.">\\1://\\2</a>", $str);
    $str = preg_replace ("/(\s|tp\:|\(|\[|\&gt;)(www\.)([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+[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~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+[a-z0-9~#%@&:;=!',_æøå\(\)\?\/\-\+\[\]\|\*\$\^\{\}]+)/i", "\\1<a href=\"ftp://\\2\\3\"".$ins_str.">\\2\\3</a>", $str);
    return text_reduce($str);
}
Avatar billede d.kryger Praktikant
01. februar 2008 - 13:04 #29
Nu virker det rigtig fint... MEN så er der kun lige det tilbage at hvis der er et komma (,) lige efter et link, så tager den også det med i selve linket... Prøv evt. at bruge denne tekst:

"Dette er en tekst, hvor jeg gerne vil linke til www.dr.dk. Men jeg kunne også godt tænke mig en is. Dette er en tekst, hvor jeg gerne vil linke til www.dr.dk, men jeg kunne også godt tænke mig en is."

Jeg håber du kan (og vil) hjælpe mig med det!
Avatar billede jakobdo Ekspert
01. februar 2008 - 18:54 #30
Så fjern også , fra det vi indsatte.
Tænk lidt selv! :o)
Avatar billede d.kryger Praktikant
05. februar 2008 - 09:31 #31
Fuck det er smart :)
Tak for hjælpen igen!
Avatar billede jakobdo Ekspert
05. februar 2008 - 10:33 #32
:o)
Avatar billede d.kryger Praktikant
26. februar 2008 - 15:38 #33
Hej Jakob. Kan man enkelt lave det sådan at den også kan tage e-mail adresser med?
Avatar billede jakobdo Ekspert
26. februar 2008 - 21:14 #34
Jeg har ikke selv en løsning som kan bygges sammen med, men du kan måske låne lidt her:

http://www.totallyphp.co.uk/code/convert_links_into_clickable_hyperlinks.htm
Avatar billede d.kryger Praktikant
27. februar 2008 - 11:46 #35
Det var sku smart, igen :)
Endnu engang tak for hjælpen.
Avatar billede nielle Nybegynder
28. februar 2008 - 17:39 #36
Bortset fra at man ikke bør anvende ereg_xxxx() funktionerne mere ... de forsvinder snart helt fra PHP (og det er kun én af grundene til at undgå dem). Deres arvetagere er preg_xxxx() funktionerne.
Avatar billede d.kryger Praktikant
29. februar 2008 - 07:51 #37
Ok, det lyder jo ikke så godt :(

Nu sprøger jeg sikkert dumt, men kan jeg bare skifte ereg ud med preg? Eller skal hele koden skrives om?
Avatar billede olebole Juniormester
29. februar 2008 - 15:55 #38
Koden skal skrives om. ereg-funktionerne bygger på posix-reg-exp, mens preg-funktionerne bygger på Perl-reg-exp. De to reg-exp syntakser er lidt (men væsentligt) forskellig
Avatar billede d.kryger Praktikant
03. marts 2008 - 08:12 #39
Jeg har gjort sådan og det ser ud til at virke efter hensigten:

function text_url($str, $target, $css_class)
{
    $ins_str = "";
    if($css_class)
        $ins_str .= " class=\"".$css_class."\"";
    if($target)
        $ins_str .= " target=\"".$target."\"";
    $str = text_expand($str);
    $str = preg_replace ("/(ftp|http|https|telnet|news|nntp|file|irc):\/\/([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+[a-z0-9~#%@&:;=!',_æøå\(\)\?\/\-\+\[\]\|\*\$\^\{\}]+)/i", "<a href=\"\\1://\\2\"".$ins_str.">\\1://\\2</a>", $str);
    $str = preg_replace ("/(\s|tp\:|\(|\[|\&gt;)(www\.)([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+[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~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+[a-z0-9~#%@&:;=!'_æøå\(\)\?\/\-\+\[\]\|\*\$\^\{\}]+)/i", "\\1<a href=\"ftp://\\2\\3\"".$ins_str.">\\2\\3</a>", $str);
    $str = preg_replace ("/([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})/i", "<a href=\"mailto:\\1\"".$ins_str.">\\1</a>", $str);
    return text_reduce($str);
}

function text_expand($str)
{
    return " ".$str." ";
}

function text_reduce($str)
{
    return substr($str, 1, -1);
}

print text_url($tekst,"_blank",'');

Skulle der være noget problem med det?
Avatar billede d.kryger Praktikant
04. marts 2008 - 15:03 #40
Hvis e-mail adressen hedder f.eks. navn@efternavn.name, så bliver den ikke til en e-mail. Den tillader kun to eller tre karakterer efter punktumet. Hvordan kan jeg ændre det?
Avatar billede jakobdo Ekspert
04. marts 2008 - 15:39 #41
Du kan rette: {2,3} til: {2,4}
2,3 betyder 2 til 3 tegn
2,4 betyder 2 til 4 tegn

osv...
Avatar billede olebole Juniormester
04. marts 2008 - 23:25 #42
- og det skal nok være 6 tegn ... bla@blabla.museum  =)
Avatar billede jakobdo Ekspert
05. marts 2008 - 08:34 #43
Tænkte ikke længere end name og info...
Olebole: Du tænker altid skridtet videre. :o)
Avatar billede nielle Nybegynder
05. marts 2008 - 18:31 #44
Avatar billede nielle Nybegynder
05. marts 2008 - 18:32 #45
... men bortset fra det: Hvorfor eksplicit skrive 6? Så skal man jo ind og revidere sine scripts hver gang at det kommer et enkelt TLD som er længere end det hidtidige længste.
Avatar billede tmi Nybegynder
10. maj 2008 - 00:03 #46
wtf?? Faldt lige over den her tråd.. Det var dog det grimmeste stykke php jeg noget sinde har set.. Haha, .. undskyld :$ Fuck det ser grimt ud! Jeg har iøvrigt lige købt et domæne med ö i, må folk så ikke linke til mig? :-P .. IDN er mere end æøå.
Hvad med noget ála:

function text_url($str, $target, $class) {
preg_replace("#(^|\s)(([a-z]+:|www\.)\pL+\.\pL+)(\s|$)#iu", "\${1}<a href='\${2}' target='$target' class='$class'>\${2}</a>\${4}", $text);
}

.. Jeg er sikkert dum og grim, men jeg spørger bare :=D
Avatar billede jakobdo Ekspert
10. maj 2008 - 08:56 #47
tmi: Koden virker også på ftp, https, telnet osv...
Så selve koden dækker lidt bredere end din FLOTTE kode.

Og ud over det, så synes jeg slet ikke din funktion virker.

Tester følgende:

function text_url($str, $target, $class) {
    return preg_replace("#(^|\s)(([a-z]+:|www\.)\pL+\.\pL+)(\s|$)#iu", "\${1}<a href='\${2}' target='$target' class='$class'>\${2}</a>\${4}", $str);
}

$text = 'Dette er en tekst, hvor jeg gerne vil linke til http://www.dr.dk. Men jeg kunne også godt tænke mig en is.';

print text_url($text,"_blank",'default');
Avatar billede tmi Nybegynder
10. maj 2008 - 11:03 #48
Undskyld, det var seudokode.. Her er en funktion der laver alle protokoler om til links og så laver den www om til protokolen http. Den viser kun domænenavnet i linket og så tager den afsluttende komman, punktum og spørgsmål tegn, som man jo bruger i sin grammatik.

<?

function text_url($text, $target, $class) {
    return str_replace("<a href='www.", "<a href='http://", preg_replace("#(^|\s)([a-z]+:/?/?|(www\.))([^\s/]+)(/[^\s]+)?((\.|\?|,)?\s|$)#Ui", "\${1}<a href='\${2}\${3}\${4}\${5}' target='$target' class='$class'>\${3}\${4}</a>\${6}", $text));
}

$text = 'Dette er en tekst, hvor jeg gerne vil linke til https://www.dr.dk. Er dette skræmmende http://ekstrabladet.dk/flash/udlandkendte/article1005754.ece? Hilsen www.anders.dk, og www.andersine.dk/?trackinglink=400&noget=andet';

print text_url($text,"_blank",'default');

?>
Avatar billede jakobdo Ekspert
10. maj 2008 - 12:54 #49
Det må jeg sgu sige, det er flot kode! :o)
Men den spiser dog ikke: ftp://ftp.noget.dk
Avatar billede jakobdo Ekspert
10. maj 2008 - 12:56 #50
Jeg ser lidt flere mangler her: http://www.codebreaker.dk/exp/790633exp.php
Avatar billede tmi Nybegynder
10. maj 2008 - 13:38 #51
Nu var det jo også et hurtigt udkast fordi du brokkede dig over det ikke virkede :-P.. Men så lad os da få levet en færdig en, er det her bedre?

<?
function text_url($text, $attrs) {
    return preg_replace(
        array("#<a href='www\.#", "#(\s) #"),
        array("<a href='http://www.", "\\1"),
        preg_replace(
            "#(^|[\s,({[])([a-z]+:/?/?|(www\.))([^\s/]+)(/[^\s]*)?([!.?,)}\]]?(\s|$))#Ui",
            "\\1<a href='\\2\\4\\5' $attrs>\\3\\4</a>\\6",
            preg_replace(
                "#\s#",
                "\\0 ",
                $text
            )
        )
    );
}

$text = 'http://www.test.dk/
Alm link: http://www.dr.dk.
Spørgsmål: http://ekstrabladet.dk/flash/udlandkendte/article1005754.ece?
Https: https://www.sikkerpånettet.dk!
http://www.andeby.dk/ - Min hjemmeby
FTP og andet: ftp://anders@and:andeby.dk mms:stream.video-og-musik/?yndlingssang
Uden protokol: www.anders.dk www.andersine.dk/?trackinglink=400&noget=andet
I parantes: (mailto:anders@and.dk)';

print nl2br(text_url(htmlentities($text),"target='_blank' class='default'"));

?>
Avatar billede tmi Nybegynder
10. maj 2008 - 13:45 #52
Eksperten tillader quotede links kan jeg se, lad os få det på ;-)
Mon eksperten har fået en ny tekst-links-funktion: (haha)

<?

function text_url($text, $attrs) {
    return preg_replace(
        array("#<a href='www\.#", "#(\s) #"),
        array("<a href='http://www.", "\\1"),
        preg_replace(
            "¤(^|[\s,\"'({[]|&quot;|&#039;)([a-z]+:/?/?|(www\.))([^\s/]+)(/[^\s]*)?(([!.?,)}\"'\]]|&quot;|&#039;)?(\s|$))¤Ui",
            "\\1<a href='\\2\\4\\5' $attrs>\\3\\4</a>\\6",
            preg_replace(
                "#\s#",
                "\\0 ",
                $text
            )
        )
    );
}

$text = "http://www.test.dk/
Alm link: http://www.dr.dk.
Spørgsmål: http://ekstrabladet.dk/flash/udlandkendte/article1005754.ece?
Https: https://www.sikkerpånettet.dk!
http://www.andeby.dk/ - Min hjemmeby
FTP og andet: ftp://anders@and:andeby.dk \"mms:stream.video-og-musik/?yndlingssang=1\" 'mms:stream.video-og-musik/?yndlingssang=2'
Uden protokol: www.anders.dk www.andersine.dk/?trackinglink=400&noget=andet
I parantes: (mailto:anders@and.dk)";

print nl2br(text_url(htmlentities($text, ENT_QUOTES),"target='_blank' class='default'"));

?>
Avatar billede tmi Nybegynder
10. maj 2008 - 13:50 #53
PS.. du kan self ikke lave c:\documents and settings\skidt.exe - da mellemrum skal escapes til enten + eller %20..
Avatar billede jakobdo Ekspert
10. maj 2008 - 13:57 #54
Det begyder at se godt ud! :o)
Avatar billede tmi Nybegynder
10. maj 2008 - 14:00 #55
lol, jeg er sgu også lidt stolt, nu jeg sidder og glor på det. Jeg må hellere poste koden i min blog og frigive den med en GNU licens
Avatar billede olebole Juniormester
10. maj 2008 - 14:14 #56
Det er vel ikke så lige til at licensere en kode, man har siddet og udviklet i et offentligt forum. Den ligger jo allerede nu ganske ulicenseret i public domain  =)
Avatar billede tmi Nybegynder
10. maj 2008 - 14:26 #57
Jeg har heller ingen blog, så jeg kan heller ikke poste den i min blog :-(
Avatar billede tmi Nybegynder
10. maj 2008 - 14:32 #58
Olebole, du er blevet snydt.. På ekspertens forside står der:
Top 10
1 arne_v 682.575
2 bufferzone 335.617
3 eagleeye 306.611
4 roenving 295.921
5 screem_brille 217.614
6 kalp 208.955
7 keysersoze 196.609
8 terry 196.178
9 tonnybrandt 194.108
10 arlet 169.479

Men nå man kigger på din profil står der at du er nr. 9 med ~180.000 point.. Hvordan det så lige bliver til nr. 9 når tonnybrandt har ~194.000 er vel også et godt spørgsmål.. Jeg tror jeg skal have nogle skolepenge tilbage?
Avatar billede tmi Nybegynder
10. maj 2008 - 15:02 #60
Olebole er nr. 9 på toplist, så vi må antage at det ikke er den top10?
Olebole er nr. 11 pointstat, men pointstats top 10 != forsidens Top 10.
Skal man være VIP for at se fx screem_brille's bruger som man kan trykke på i Top 10-listen på forsiden? :p - Og så i et ekspert-forum.. Flovt :$
Avatar billede olebole Juniormester
10. maj 2008 - 15:32 #61
Hehe ... det tyder på, der er en DB, som ikke bliver opdateret - eller noget. screem_billes profil eksisterer således ikke længere. Der er mange 'sjove hjørner' på Eksperten  ;o)

Det er mange år siden, jeg har hængt mig i points, så deeeeeeet ...  =)
Avatar billede tmi Nybegynder
12. august 2008 - 09:33 #62
Jeg fik lige brug for at bruge funktionen selv og fandt ud af at den godt kun blive lidt smartere ;-)

function urls2links($text, $attrs = "") {
    return preg_replace(
        array("@(?<=^|[\s\pP])([a-z-]+:/?/?|(www\.))([^\s/]{4,})(/[^\s]*)?(?=(&(quot|#039|lt|gt);|[^\PP/])?(\s|$))@uUi","#'(?=www\.[^\s/]{4})#i"),
        array("<a href='\\1\\3\\4' title='\\1\\3\\4' $attrs>\\2\\3</a>","'http://"),
        $text
    );
}
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