Avatar billede supermand69 Nybegynder
31. august 2004 - 19:32 Der er 7 kommentarer og
1 løsning

url2link funktion

jeg skal have lavet en funtion som kan lave url's om til links :)

jeg har noget kode her, men der mangler noget og den virker ikke helt som den skal...

function url2link($txt)
{
    return preg_replace("/(((ftp|https?):\/\/)([^\s\n!<,\.\?\&]+))/i", "<a href='\\1' target='_blank'>\\1</a>", $txt);
}

den skal kunn lave følgende om til links, og samtidig kunne stoppe preg i tide så linket kommer til at virke:
http://www.test.dk
https://www.test.dk
ftp://test.dk
www.test.dk
www.test.dk<
www.test.dk,
www.test.dk.
www.test.dk...
www.test.dk!
www.test.dk?
www.test.dk&
www.test.dk?var=1&hehe=test

jeg ved godt at der findes en tagster, men vil gerne have min egen version ;)
Avatar billede dennismp Nybegynder
31. august 2004 - 19:48 #1
prøv med:

return preg_replace("/((((ftp|https?):\/\/))?([^\s\n!<,\?\&]+))/i", "<a href='\\1' target='_blank'>\\1</a>", $txt);
Avatar billede dennismp Nybegynder
31. august 2004 - 19:50 #2
du havde ikke gjort http://-delen optional, så det har jeg ændret.

og så det du finder slutningen på ([^\s\n ..  , der har jeg fjernet \. - da de fleste domæner indholder mindst eet punktum :).

Måske skulle du lave så www er krævet (med mindre http:// er angivet), så den ikke matcher alt for meget
Avatar billede dennismp Nybegynder
31. august 2004 - 19:51 #3
Vent lige.. Jeg skal vist lige teste den lidt bedre :)
Avatar billede dennismp Nybegynder
31. august 2004 - 20:07 #4
Det begynder at smage af tagster...

function url2link($txt)
{
    // Sørg for at der altid er mellemrum før et link
    $txt = ' ' . $txt; 

    // find ftp,http,https og lav om til links
    $txt = preg_replace("/((ftp|https?):\/\/([^\s\n]+))/i", "<a href='\\1' target='_blank'>\\1</a>", $txt);
    // find www.(etellerandet) og lav til link. For at undgå
    // at http://www.link.com bliver fanget af den ovenstående regl, samt
    // denne, tjekker vi om der er et space foran www. Det er der altid,
    // hvis linket ikke har været replace'et af den forrige regl (for så vil der stå http://www - intet space)..
    $txt = preg_replace("/\s(www\.([^\s\n]+))/i", "<a href='http://\\1' target='_blank'>\\1</a>", $txt);
    return substr($txt,1);
}
Avatar billede supermand69 Nybegynder
31. august 2004 - 20:55 #5
Avatar billede supermand69 Nybegynder
31. august 2004 - 20:57 #6
en anden som heller ikke helt virker

function url2link($txt)
{
    $url_trans = array("/(((ftp|https?):\/\/)([^\s\n!<,\.\?\&]+))/i" => "<a href='\\1' target='_blank'>\\1</a>"
        ,"/\b(www\.[^\s\n!<,\.\?\&]+)/i" => "<a href='http://\\1' target='_blank'>\\1</a>");
   
    return preg_replace(array_keys($url_trans), array_values($url_trans), $txt);
}
Avatar billede dennismp Nybegynder
31. august 2004 - 21:12 #7
.. jeg ville nok bare bruge tagster. Den virker :)
Avatar billede supermand69 Nybegynder
31. august 2004 - 22:02 #8
ok, jeg glemmer det bare og bruger den her som jeg fik hjælp til :)

jeg fatter nada af preg... hehe

function url2link($txt)
{
    $url_trans = array("/(((ftp|https?):\/\/)([^\s\n<]+))/i" => "<a href='\\1' target='_blank'>\\1</a>",
        "/\b(www\.[^\s\n<]+)/i" => "<a href='http://\\1' target='_blank'>\\1</a>");
   
    return preg_replace(array_keys($url_trans), array_values($url_trans), $txt);
}
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