Multidesk.be » Forums » PHP » URL zoeken in string

  • Pagina
  • 1 van 1
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door SMG op woensdag 6 februari 2008 om 20:00:21.
SMG's avatar
Multiviteit: 12000
Moderator
Ik zou een preg expressie moeten hebben die een URL zoekt in een tekst en daar dan een <a ...>...</a> bij zet.

Kort voorbeeld dus: http://www.multidesk.be
Dat is dus eigenlijk wat ik zoek, een preg expressie die de http://www.multidesk.be zoekt en daar dan een aanklikbare link van maakt.

Ik heb zelf ook een paar uurtjes bezig geweest om er eentje te maken maar echt fantastisch werkt die niet:
$str = preg_replace_callback('#(http|ftp|https):\/\/+[a-z0-9\-_]+\\.+[a-z0-9\.\,\+\&amp;\:\/%$=\?\-_]+( |$)#iUs', "url", $str);

Hij doet zijn werk wel maar als je een URL hebt en meteen daarna een ENTER, dan loopt het fout. Ik wil het echter niet nog ingewikkelder maken dat dat ie nu al is, vandaar dus mij vraag ;)

Alvast bedankt ;)
^ Reactie #1 geschreven door Martijn op woensdag 6 februari 2008 om 20:17:21.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
En wat is die functie die je aanroept?

Waarom gebruik je geen gewone preg_replace()? Is daar een reden voor?
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #2 geschreven door SMG op woensdag 6 februari 2008 om 22:23:42.
SMG's avatar
Multiviteit: 12000
Moderator
Ik doe dat omdat een gewone replace niet helemaal voldoende is. Ik zou graag te lange URL's ook inkorten, vandaar de extra functie.
PHP
  1. <?php
  2. function url($input){   
  3.         if(strlen($input[0]) > 40)
  4.                 return '<a href="' . $input[0] . '" class="uit">' . substr($input[0],0,30) . '...' . substr($input[0],strlen($input[0])-7,7) . "</a> ";
  5.         else
  6.                 return '<a href="' . $input[0] . '" class="uit">' . $input[0] . "</a> ";
  7. }
  8. ?>
^ Reactie #3 geschreven door Martijn op donderdag 7 februari 2008 om 22:49:22.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Wat is de reden dat die +( |$) nog in je regex staat?
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #4 geschreven door SMG op donderdag 7 februari 2008 om 23:03:28.
SMG's avatar
Multiviteit: 12000
Moderator
Wel, daar begon ik te knoeien :p
Die zou normaal gezien moeten voorstellen dat hij alles met http://... moet zoeken tot hij een spatie of een einde heeft van zijn string.
Maar het probleem dat je dan krijgt is dat hij problemen geeft met new lines, <br /> ... dat er eventueel achter komen.

Om een lang verhaal dus kort te maken, ik heb er een potje van gemaakt en wil niet terug een paar uur bezig zijn om er allemaal lussen omheen te maken om uiteindelijk tot een nieuw probleem te komen ;)
^ Reactie #5 geschreven door Simon op vrijdag 8 februari 2008 om 19:39:25.
Simon's avatar
Multiviteit: 3742
Ik gebruik deze, in de gevallen waarvoor ik heb hem getest heb werkt hij alleszins :D:
PHP
  1. '#(^|[ \n\r\t])((http(s?)://)(www\.)?([a-z0-9_-]+(\.[a-z0-9_-]+)+)(/[^/ \n\r]*)*)#', //URL met http(s)://
  2. '#(^|[ \n\r\t])(www\.([a-z0-9_-]+(\.[a-z0-9_-]+)+)(/[^/ \n\r]*)*)#', //URL met www....
  3.  
  4. '\1<a href="\2" target="_blank">\2</a>', //URL met http(s)://
  5. '\1<a href="http://\2" target="_blank">\2</a>', //URL met www....   

Deze tekst werd het laatst bewerkt voor 0.12 % door Simon op vrijdag 8 februari 2008 om 19:39:37.
^ Reactie #6 geschreven door Martijn op zaterdag 9 februari 2008 om 10:52:49.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Heb nog niet de tijd gehad om hierop te antwoorden, mijn excuses. Probeer eens of de regex van Simon je tot het gewenste resultaat brengt.
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #7 geschreven door SMG op woensdag 13 februari 2008 om 18:06:06.
SMG's avatar
Multiviteit: 12000
Moderator
Wegens gebrek aan tijd zal ik gewoon mijn code hier neer pennen. Ik denk dat mijn put wat dieper zit moest ik gewoon even simon zijn code gebruiken (het is nl mijn eerste custom made BBC en ik vrees dat een simpele copy past niet zal lukken :p)

Omdat de code zelf veel te groot is om hier in de PHP tags te zetten plaats ik het even online: http://smggm.madoka.be/bbc_highlight.php

Het is dus de bedoeling dat bbc_normaal uitgevoerd wordt en dat het iedere gewone tekst omzet. Wat het allemaal moet doen kan je daaruit afleiden.
De huidige code werkt (goed) maar is volgens mij slecht opgebouwd. Ik plaats nogal vaak dingen die volgens mij overbodig zijn of anders kunnen. Echter omdat mijn kennis PHP zeer basis is kan het zijn dat je mij uitlacht :p

Als er dus tips zijn, geef ze maar. Waar zeker naar gekeken moet worden is volgens mij de links. Ook naar de manier hoe ik voorkom dat er smilies terecht kunnen komen in code tags lijkt me ook niet echt hoe het werkelijk moet.

Ik hoop dat er iemand tijd heeft voor een wanhopen en op het moment zeer drukke mens :p

Edit: nog een belangrijk ding, voordat bbc_normaal uitgevoerd wordt gaat er eerst uitlezen() uitgevoerd worden.
Deze tekst werd het laatst bewerkt voor 2.28 % door SMG op woensdag 13 februari 2008 om 18:18:26.
  • Pagina
  • 1 van 1

Snel-antwoordformulier
Toon uitgebreid antwoordformulier Bericht nalezen Bericht plaatsen