login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[opgelost] preg_replace en URL's (Opgelost)

Offline Ricky - 07/01/2007 18:48 (laatste wijziging 07/01/2007 19:37)
Avatar van RickyPHP beginner
Citaat:
filemanager/dir.php?dir=../geshi/docs/
In die url kan vanaf ?dir= vanalles staan, dus bijv. ook
Citaat:
filemanager/dir.php?dir=blaat/lol/hoi/
Nu wil ik alleen het laatste deel eraf halen met behulp van preg_replace().
(dus docs/ en hoi/)

Dit gebruik ik nu:
  1. preg_replace("#/(.*)/#", "", $directory);


Maar dat levert dit op:
Citaat:
filemanager/dir.php?dir=..

Hoe kan ik dat het beste doen?

10 antwoorden

Gesponsorde links
Offline Ibrahim - 07/01/2007 18:53
Avatar van Ibrahim PHP expert preg_replace('~?dir=(.*?)~', '', $directory);
Offline Ricky - 07/01/2007 18:54
Avatar van Ricky PHP beginner Warning: preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 0 in D:\Rick\xampp\htdocs\tests\filemanager\dir.php on line 41
Offline Ibrahim - 07/01/2007 18:58
Avatar van Ibrahim PHP expert ow sorry die ? is een gereserveerde teken. Je moet hem escapen

? = repeat functie van reguliere expressies.
Offline Ricky - 07/01/2007 19:01 (laatste wijziging 07/01/2007 19:05)
Avatar van Ricky PHP beginner Thanks voor je snelle reactie, maar ik heb nu dus
  1. preg_replace("~\?dir=(.*?)~", "", $directory);

en dat levert als nieuwe url dit op:
Citaat:
filemanager/dir.php?dir=../geshi/docs/

Edit: en docs/ moet er juist af...
Offline Ibrahim - 07/01/2007 19:11
Avatar van Ibrahim PHP expert ow, de laatste moet eraf

dan zul je lookbehinds moeten proberen, en ik ben nog niet bij dat hoofdstuk 
Ik weet wel wat ze doen, maar om het toe te passen in jou situatie niet.

http://regular-expressions.info/lookaround.html

Kijk daar maar eens op.
Offline Ricky - 07/01/2007 19:14
Avatar van Ricky PHP beginner Pfffff.... dat gaat boven mijn pet  
In ieder geval bedankt, en misschien weet iemand anders de oplossing?
Offline timmie_loots - 07/01/2007 19:20
Avatar van timmie_loots PHP gevorderde
  1. preg_replace("/\/(.*)$/i", "/", $directory);


Zoiets? Dat zou /docs/ moeten vervangen door /.
Offline Ricky - 07/01/2007 19:22
Avatar van Ricky PHP beginner Geeft alleen ?dir=../
Offline Ibrahim - 07/01/2007 19:32
Avatar van Ibrahim PHP expert je kunt ook conditions gebruiken in regex (reguliere expressies).
Dat misschien combineren met die lookbehind

  1. (?(?<=(\/(.*?)\/)+)erzijndingenachterwatjenumoetdoenmoetiknogleren|geendingenachter)


zoiets, maar nogmaals, ik moet dit nog leren 
Offline Ricky - 07/01/2007 19:36
Avatar van Ricky PHP beginner
  1. preg_replace('~((?:(?![^/]*/$)[^/]*/)*)[^/]*/~i', '$1', $directory);


Dat is de oplossing, dankzij JeXuS.

En er was nogiets: ?dir= weet hij helemaal niet (dom van me), want die var wordt ingesteld als $_GET['dir'], dus alleen die complete dir staat erin.

Allemaal bedankt!
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.227s