Avatar billede supermand69 Nybegynder
15. august 2004 - 14:32 Der er 29 kommentarer og
1 løsning

preg replace

jeg skal have lavet en simpel preg_replace som kan lave alle ord som starter med "www.", "http://", "https://" eller "ftp://" om til et link

jeg har set lidt på tagsteren på www.ljweb.com, men vil gerne have noget som kan præcis og kun det jeg vil have den til :D

her er den kode som jeg har lige nu, men vil gerne have lavet den mere enkel så den netop KUN kan det som jeg vil have den til

function url2link($txt)
{
    return preg_replace("/(ftp|http|https):\/\/([\d\w~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "<a href=\'\\1://\\2\' target=\'new\'>\\1://\\2</a>", $txt);
}
Avatar billede coderdk Praktikant
15. august 2004 - 22:22 #1
Denne virker fint :) Iøvrigt hvis du vil åbne et nyt vindue, hedder target svjh _blank:

    $urlTrans = array(
          "/(((ftp|https?):\/\/)([^\s\n]*))/i" => "<a href='\\1' target='_blank'>\\4</a>"
          ,"/\b(www\.[^\s\n]*)/i" => "<a href='http://\\1' target='_blank'>\\1</a>"
        );

    $nyText = preg_replace( array_keys( $urlTrans ), array_values( $urlTrans ), $dinText );
Avatar billede supermand69 Nybegynder
16. august 2004 - 15:27 #2
sejt...

men jeg vil gerne have protokollen med i linket :) hvis altså det bliver skrevet...
Avatar billede coderdk Praktikant
16. august 2004 - 16:00 #3
Ok :)

    $urlTrans = array(
          "/(((ftp|https?):\/\/)([^\s\n]*))/i" => "<a href='\\1' target='_blank'>\\1</a>"
          ,"/\b(www\.[^\s\n]*)/i" => "<a href='http://\\1' target='_blank'>http://\\1</a>"
        );
Avatar billede supermand69 Nybegynder
16. august 2004 - 16:22 #4
tark =)
Avatar billede coderdk Praktikant
16. august 2004 - 16:30 #5
np :) og selvtak
Avatar billede supermand69 Nybegynder
25. august 2004 - 21:22 #6
jeg er stødt på et problem... :(

hvis der står noget HTML kode lige efter url'en kommer det med i linket...

hvordan kan man gøre sådan den stopper linket når der kommer specieltegn eller lignende?

den skal heller ikke lave et link hvis der kun står http://, www. osv. men der skal mindst være et tegn bagefter
Avatar billede coderdk Praktikant
25. august 2004 - 22:14 #7
Hmm, problemet er at der kan være rimelig mange specialtegn i en URL...
selve hostnamet kan bestå af .a-z0-9\-_, og nogle kan have specialtegn som æøå, stien efter hostnavnet som eksperten.dk/spm/529412 - altså /spm osv kan have mange specielle tegn i...

Det er f.eks. helt legalt at skrive http://www.experten.dk/sti. og mene at punktummet skal med, men i dit tilfælde skal det jo nok ikke med, hvis det er et sætningspunktum... Så den er lidt sværere.

Men prøv og se om dette ikke er nok:

    $urlTrans = 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>"
        );
Avatar billede supermand69 Nybegynder
25. august 2004 - 22:57 #8
er det ikke det samme som før? :)

kan det ikke laves sådan at linket i hvert fald stopper hvis det ramler ind i <??
Avatar billede coderdk Praktikant
25. august 2004 - 23:45 #9
hehe det er ikke den samme som før, og her er en ny:

    $urlTrans = 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>"
        );
Avatar billede coderdk Praktikant
25. august 2004 - 23:46 #10
Den stopper ved ! < og > - Nu jeg tænker mig om så stopper denne ved ! og <:

    $urlTrans = 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>"
        );
Avatar billede supermand69 Nybegynder
29. august 2004 - 21:04 #11
tark ;)
Avatar billede supermand69 Nybegynder
29. august 2004 - 21:07 #12
øhh... og så lige en lille tilføjelse.. linket med heller ikke ende på .

hehe...
Avatar billede coderdk Praktikant
29. august 2004 - 21:08 #13
smid \. ind sammen med \s\n!<
Avatar billede supermand69 Nybegynder
29. august 2004 - 21:10 #14
og må heller ikke ende på ?
Avatar billede supermand69 Nybegynder
29. august 2004 - 21:11 #15
jeg fatter nada af preg... gider du ikke lige vise det? :)
Avatar billede coderdk Praktikant
29. august 2004 - 21:13 #16
$urlTrans = 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>"
        );
Avatar billede supermand69 Nybegynder
29. august 2004 - 21:25 #17
Avatar billede coderdk Praktikant
29. august 2004 - 21:31 #18
heh, ja lidt dumt at lade den stoppe ved "." :P
Avatar billede coderdk Praktikant
29. august 2004 - 21:32 #19
Dine brugere må lære ikke at smide et . som afslutning for et link :P

    $urlTrans = 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>"
        );
Avatar billede coderdk Praktikant
29. august 2004 - 21:33 #20
? er også en dårlig ide :P

http://example.dk/?hest=1&hund=2

Den vil stoppe ved ?'et Så brug den oprindelige fra 25/08-2004 23:46:13
Avatar billede supermand69 Nybegynder
29. august 2004 - 21:36 #21
øhm... nu stopper den jo stadig hvis ? er midt i linket?? :p

kan det ikke laves så at den stopper hvis ".", "?" eller "&" er til sidst i url'en efterfulgt af et mellemrum...
Avatar billede coderdk Praktikant
29. august 2004 - 21:36 #22
Evt. prøv med:

    $urlTrans = 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>"
          ,"/<a href='(.*?)([\.\?])'>(.*?)<\/a>/" => "<a href='\\1'>\\1</a>\\2"
        );
Avatar billede supermand69 Nybegynder
29. august 2004 - 21:41 #24
hvis jeg skal være helt ærlig orker jeg ikke lige pt at sætte mig ind i preg :) men jeg skal da have sat mig ind i det på et senere tidspunkt!

jeg troede jo at sådan en hardcore php programmør som dig vidste sådan noget :p~
Avatar billede coderdk Praktikant
29. august 2004 - 21:43 #25
Hvad virker den sidste måske ikke
Avatar billede coderdk Praktikant
29. august 2004 - 21:44 #26
Det kan jeg så se at den ikke gør ;) Burde være:

    $urlTrans = 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>"
          ,"/<a href='(.*?)([\.\?])' target='_blank'>(.*?)<\/a>/" => "<a href='\\1'>\\1</a>\\2"
        );
Avatar billede coderdk Praktikant
29. august 2004 - 21:50 #27
Ok, dit eksempel ville se pænere ud med denne:

    $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>"
          ,"/<a href='(.*?)([\.\?,])' target='_blank'>(.*?)<\/a>/" => "<a href='\\1'>\\1</a>\\2"
        );

Ved ikke lige hvorfor man ville have & til at afslutte en sætning, så den ryger bare med :P
Avatar billede coderdk Praktikant
29. august 2004 - 21:51 #28
Men hvis du vil have den til det, så bare smid & ind i den sidste ;)
Avatar billede supermand69 Nybegynder
29. august 2004 - 21:52 #29
tjek nu..
Avatar billede coderdk Praktikant
29. august 2004 - 22:05 #30
Mja?
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