Om van eregi_replace naar preg_replace te gaan moet elke "pattern" ingesloten worden. In dit geval heb ik een / gebruikt, maar eigenlijk is elk niet-alfanumeriek, niet-backslash en een karakter dat geen "spatie" vertegenwoordigd of is (ik hoop dat ik het goed uitleg).
Dit zijn bijvoorbeeld geldige karakters om die insluiting te maken:
/, #, ~, +, %, @, !, < en >
Correcties mogen natuurlijk altijd gegeven worden. Ben niet 100% zeker.
Thomas - 27/01/2014 00:53 (laatste wijziging 27/01/2014 10:31)
Moderator
@UpLink: heb jij jouw oplossing getest? Bij mij krijg ik allerlei warnings :/.
Je escaped je delimiter niet in [/url]... Daarnaast staan deze preg_replaces de invoeging van JavaScript toe. En de eerste preg_replace breekt de tweede...
Test je oplossingen!
---
Ik denk dat je in de problemen komt als je er vanuit gaat dat je url begint met "www". Als je deze functionaliteit hebt staan op je site (www.test.com) dan wordt je link (bijvoorbeeld www.nu.nl) mogelijk: www.test.com/www.nu.nl of iets dergelijks.
Daarnaast lijken de expressies ongeveer hetzelfde te doen.
En last but not least wordt je user input niet ge-escaped, dus kan allerlei rottigheid (javascript enzo) bevatten.
Een veilige(re) variant die ik zo snel in elkaar heb gezet:
Maar dit geheel zou eigenlijk zelf ook in een functie (of klassemethode moeten zitten). Let ook op de pattern modifiers "s" (een link kan over meerdere regels lopen) en "U" (ungreedy, als er meerdere links op één regel staan gaat dit anders fout).
Probeer de volgende testcase maar eens zonder "s" en/of "U" pattern modifier aan te roepen:
@Crain: let er wel op dat je andere input die van UBB-functionaliteit gebruik maakt ook ge-escaped moet worden, tenzij je HTML in je posts wilt toestaan, maar aangezien je [ url=... ] ... [ /url ] gebruikt neem ik aan van niet?
Als je bovenstaande functies inbouwt in andere UBB-functionaliteit, en je had je huiswerk goed gedaan, wordt HTML mogelijk ook op andere plaatsen ge-escaped. Dit moet precies één keer gebeuren per stukje content.
Stel je namelijk het volgende voor:
Iemand plaatst de volgende link:
[ url ] www.test.com/?a=1&b2 [ /url ]
Deze wordt door de bovenstaande functies al herschreven tot: