Avatar billede ohmish Nybegynder
27. januar 2010 - 00:30 Der er 17 kommentarer og
1 løsning

preg_replace regex hjælp

Hej

Jeg roder med noget link konvertering.

Jeg bruger en metode der ikke er så stram..

Men hvordan retter jeg det til, så punktummet sidst i "http://test.dk." ikke ryger med i det klikbare link?

Her er hvad jeg bruger lige nu:


$str = 'Der var engang en url. Urlen var afsluttet med et punktum.. og hva gjorde man så? http://test.dk. Så har vi en anden url, og her er punktummet ok og kan jo være en del af urlen > http://test.dk/hej/goddag/?test=123&ja=nej.';

echo preg_replace('/((https?:\/\/)[-a-zæøå0-9@:%_\+.~#;?&\/\/=]+)/i','<a href="$1" title="link">$1</a>', $str);
Avatar billede ohmish Nybegynder
27. januar 2010 - 00:31 #1
Man kan se her at eksperten.dk faktisk heller ikke tager højde for punktummer lige efter et www.link.dk. hmm
Avatar billede j4k0b Nybegynder
27. januar 2010 - 07:40 #2
[^\.] for at matche alle tegn undtagen punktum
Avatar billede repox Seniormester
27. januar 2010 - 10:51 #3
#0
Du skaber et stort problem ud af ingenting.
Langt de fleste mennesker som skriver fulde URL'er, ved udmærket godt at man afslutter en url med et whitespace eller et linebreak.

Det ville jo også være uheldigt hvis man forestillede sig at jeg ikke måtte skrive:
http://example.org/numbers/?float=6523.87&decimal.sep=,&thousand-sep=.

#2
Uden punktum, hvordan vil du så angive host?
Avatar billede ohmish Nybegynder
27. januar 2010 - 12:45 #4
repox> Nu er både "stort problem" og "ingenting" ret så relativt.. Jeg kan godt li at være lidt checket, og også undgå at sige til en webmaster f.eks: "øh, du skal huske, at du må ikke lave punktum efter alm. korte links i teksterne" (jeg har lige været ude for en der satte punktum). Så vil jeg sgu hellere bruge lidt krudt på at funktionen tager højde for dét også.

Se hvad der står i $str =

;)

Nu har jeg tænkt lidt.. og løsningen må være noget a la:
Hvis der er IKKE er et spørgsmåltegn i adressen, så medtag ikke sidste tegn hvis dette er et punktum. Eller måske bare validere adressens opbygning i starten op til et evt. spørgsmåltegn.
27. januar 2010 - 12:54 #5
Ok, men #2 og #3 svarer vel egenlig ikke paa spoergsmaalet som stillet.  Jeg forstaar spoergsmaalet saaledes:  HVIS man af en eller anden grund vil matche en url, naturligvis inklusiv interne punktummer, men ikke vil have et eventuelt punktum efter url-en med HVORDAN goer man det saa?  (ohmish, forstod jeg det rigtigt?)

Denne expression synes at virke hos mig, se eventuelt http://christianjorgensen.be/ohmish.php.

echo preg_replace('/(https?:\/\/[-a-zæøå0-9@:%_\+~#;?&\/\/=]+(\.[-a-zæøå0-9@:%_\+~#;?&\/\/=]+)*)[^\.]?/i','<a href="$1" title="link">$1</a>', $str);

Gruppen der bliver til $1 indbefatter https?//: plus mindst en character uden punktum plus nul eller flere grupper der starter med et punktum og foelges af en eller flere characters der ikke inkluderer punktum.  Gruppen foelges derefter af nul eller et punktum.
27. januar 2010 - 12:59 #6
ohmish du sendte dit indlaeg mens jeg var i faerd med at formulere mit saa jeg saa det ikke.  Er mit indlaeg stadigvaek relevant?
Avatar billede repox Seniormester
27. januar 2010 - 13:04 #7
#5
http://codepad.org/ZJirPwHv

#4
Jeg undlader at kommentere på det faktum at du vil kalde en person, som ikke engang ved så banale ting, for en webmaster.

For mig er det et ualmindeligt lille problem, forstået på den måde at en url, burde stort set kunne bestå af en sammenhængede streng - som vi er vant til. Og de eneste som egentlig burde adskille den er et whitespace eller et linebreak.
Alternativet er at lade dine webmaster bruge simplificerede BB koder.

F.eks. [url]http://example.org/numbers/?float=6523.87&decimal.sep=,&thousand-sep=.[/url]
Avatar billede ohmish Nybegynder
27. januar 2010 - 13:16 #8
Christian, rigtigt forstået og godt bud. ;)
(ps: prøv at klikke på dit link som du har skrevet det her, hehe).

Men.. den expression tager ikke højde for punktummer i de lange urls?
Avatar billede ohmish Nybegynder
27. januar 2010 - 13:18 #9
Man kan godt være webmaster uden at være særligt web-teknisk begavet. Eller måske mener jeg mere "webredaktør"
27. januar 2010 - 13:18 #10
repox, hmmm, - http://www.eksperten.dk/faq#faq-9-1 - Jeg har forstaaet at Eksperten er et forum hvor medlemmer kan stille spoergsmaal om hvad der FOR DEM er problemer.  Eller har jeg misforstaaet?
Avatar billede ohmish Nybegynder
27. januar 2010 - 13:25 #11
Det giver ihvertfald ikke mening for mig at falde af på den her, slet ikke når jeg nu ved at det slet ikke er så svært at få til at dutte (har gjort det før med en anden expression som nu er forældet) ;)
Avatar billede repox Seniormester
27. januar 2010 - 13:35 #12
#9
Webmaster er nok et udfaset og forældet ord - i tidligere tider anvendte man termen for de brugere som veligholdte websites - herunder udviklingen af HTML'en. Webredaktører/redaktører er en nutidig og passende betegnelse for personer som vedligeholder content på websitet og ikke behøver at have så meget teknisk viden. De er dog - ligesom alle andre, inklusive os udviklere - omfattet af nogle retningslinier, som kvalitetsikrer deres arbejde.

Men nu er det jo bare ord; når du støder på et problem, som det du har her, skal du overveje det tekniske behov, idét du potentielt kan ændre på noget, som normalt ville give mening som det, min indskrænker brugervenligheden og tilgængeligheden for dine webredaktører, fordi du ikke udskikker retningslinierne klart nok. Med det sagt, så synes jeg du skal overveje problemet igen. Og hvis det vitterligt er så vigtigt for dig at ændre i et workflow som man normalt er vant til, så start med at konstatere de kritirier der skal være for at (eksempelvis) punktum ikke må være det sidste i en URL. Måske 'problemet' skal løses uden for din regex ved at tage nogle logiske beslutninger.

#10
Hvad med at lade de brugere jeg tiltaler om at brokke sig over min tone, istedet for at du gør det for dem? Og eventuelle problemer med min attitude kan enten debatteres med mig via PM eller du kan gøre kort proces via 'Anmeld misbrug' funktionen. Dine holdninger til min person er ikke interessant eller relevant for andre - inklusive mig.

Du ved udmærket godt hvad E kan bruges til; E er ikke et magisk forum som løser alle problemer. E er netop et forum - et forum hvor der sidder en masse talentfulde mennesker og begavede hoveder som både har erfaring og ekspertise inden for nogle områder og som vælger at bruge tid på at hjælpe andre - gratis!
Problemløsning er altså andet end blot at lægge to og to sammen.
27. januar 2010 - 14:08 #13
repox, jeg fulgte dit raad.
27. januar 2010 - 15:21 #14
ohmish (#8) - jamen saa maa jeg nok melde pas.  (Der troede jeg ellers lige jeg var smart.)  Jeg ved ikke nok lange uris og hvilke vaerdier der er tilladte (og jeg har ikke kunnet finde noget om det) til at kunne fastlaegge det i regex.  Saa jeg maa nok staa af traaden.

Men dit spoergsmaal gav mig anledning til at kikke i boegerne om regular expressions igen.  Det er den slags man (eller jeg) glemmer hvis man ikke har arbejdet med det for nylig.
Avatar billede j4k0b Nybegynder
27. januar 2010 - 16:34 #15
#3 med ovenstående udtryk kan du ikke matche på host med at matche på alle tegn undtagen punktum. Men en URL har altid en nogenlunde fast struktur, så udtrykket kunne hurtigt ændres sådan at det kun er TLD-delen du vil matche på tegn uden punktum
Avatar billede ohmish Nybegynder
29. januar 2010 - 13:32 #16
Ikke løst endnu. Lader det ligge lidt..
Men tak for hjælpen
30. januar 2010 - 12:57 #17
Du har valgt at lade det ligge og oprettet et svar.  Er tiden saa ikke inde til at du accepterer dit eget svar og derved lukker traaden?  Saa er for god ordens skyld 'ryddet op,' du faar dine 120 points tilbage, og traaden staar ikke laengere som aaben i min (og andres) liste af indlaeg.  Hvis du vil tage det op igen senere vil du under alle omstaendigheder skulle oprette et nyt spoergsmaal.  Chancerne for at faa input paa en gammen traad er ikke store.
Avatar billede ohmish Nybegynder
30. januar 2010 - 16:29 #18
ro på sherif ;)
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

IT-JOB