login  Naam:   Wachtwoord: 
Registreer je!
 Forum

pattern modifier 'e'

Offline Rens - 22/03/2007 14:33
Avatar van RensGouden medaille

Crew algemeen
Ik ben bezig met een UBB class, en daarvoor heb ik bij sommige regex's de modifier 'e' er bij staan.
Maar die zorgt er voor dat de text meteen slashes erbij krijgt.

Kan ik dit niet voorkomen op de een of andere manier?

14 antwoorden

Gesponsorde links
Offline Gerard - 22/03/2007 14:41
Avatar van Gerard Ouwe rakker e staat dus voor 'evaluate replacement' (cheat sheet). Waarschijnlijk staat magic_quotes_gpc dus aan op jouw server?
Offline Rens - 22/03/2007 14:44
Avatar van Rens Gouden medaille

Crew algemeen
Ja, die staan inderdaad aan.
Offline Gerard - 22/03/2007 14:46
Avatar van Gerard Ouwe rakker Omdat hij het dan gaat evalueren ben ik bang dat hij het dus ziet als post/etc input en daarom de slashes eroverheen knalt. Probeer sowieso te ontwikkelen met magic_quotes_gpc uit. Dit kan je makkelijk doen door een .htaccess bestand te maken met daarin:
  1. php_flag magic_quotes_gpc off
Op die manier voorkom je problemen wanneer je website op een andere server wordt gezet waar het niet standaard aan staat en jij vertrouwt op de magic_quotes.
Offline Rens - 22/03/2007 14:53
Avatar van Rens Gouden medaille

Crew algemeen
Heb het nu met die .htaccess uitgezet, maar er worden nog steeds slashes omheen gezet? 
Offline Gerard - 22/03/2007 14:54
Avatar van Gerard Ouwe rakker Staat magic_quotes_runtime toevallig ook aan dan? Het is allemaal maar een gokje wat ik hier doe hoor, Rens. Het is maar even dat we wat proberen om erachter te komen wat het is. Ik heb zelf geen ervaring met de 'e' pattern modifier.
Offline Rens - 22/03/2007 14:55 (laatste wijziging 22/03/2007 15:01)
Avatar van Rens Gouden medaille

Crew algemeen
Nee, ze staan beide uit... 

edit; Ik zie nu net dat het alleen met dubbele quotes is.
Met single quotes heb ik nergens last van...
Offline Rik - 22/03/2007 15:15
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
PHP.net:
Citaat:
If this modifier is set, preg_replace() does normal substitution of backreferences in the replacement string, evaluates it as PHP code, and uses the result for replacing the search string. Single and double quotes are escaped by backslashes in substituted backreferences.


Het is dus normaal dat quotes daardoor worden geëscaped. Raar dat dat alleen bij dubbele quotes gebeurd... Komt dat misschien omdat je dubbele quotes om je regex hebt staan? Of juist omdat het enkele quotes zijn? 

Anders kan je er altijd nog stripslashes() over halen.
Offline Rens - 22/03/2007 15:18 (laatste wijziging 22/03/2007 16:45)
Avatar van Rens Gouden medaille

Crew algemeen
Het word steeds vager.
http://www.rensjuh.nl/geshi/
Is mijn code, die dus niet goed werkt.

http://www.rens...xample.php
is de code van GeSHi zelf, maar die werkt wel goed... 

edit; Ik heb het opgelost 
Ik heb het zo gemaakt dat de e modifier niet meer nodig is:
  1. function parse_code($sInvoer)
  2. {
  3.  
  4. preg_match("~\[code\=(.*?)\](.*?)\[\/code\]~si", $sInvoer, $aResult);
  5. for($i = 0; $i < strLen($aResult[0]); $i++)
  6. {
  7. if($aResult[0]{$i} == "]")
  8. {
  9. $iChar = $i;
  10. break;
  11. }
  12. }
  13. $sCode = subStr($aResult[0], $iChar+1, strlen($aResult[0]));
  14. $sCode = subStr($sCode, 0, (strLen($sCode)-7));
  15. $oGeshi = new Geshi($sCode, $aResult[1]);
  16. $oGeshi->enable_line_numbers(1);
  17. $this->aCodes[] = $oGeshi->parse_code();
  18. return "[codeblock ".(count($this->aCodes)-1)."]";
  19. }
Offline Thomas - 23/03/2007 10:18
Avatar van Thomas Moderator Hmm... Je zou in de forum-code van deze site kunnen kijken (of heb je geen FTP-access)?

Ik heb dit gewoon opgelost met een str_replace.

Als je de code wilt, dan stuur mij maar een PM.

Wel graag vragen voordat je iets gaat gebruiken aub.
Offline Rens - 23/03/2007 10:21
Avatar van Rens Gouden medaille

Crew algemeen
Ik ben inmiddels opnieuw begonnen met de codeparse functie.
Zoals ik het had parste hij maar 1 codeblock.
Had ik even niet aan gedacht 

Even een ander vraagje.
Kun je ook in een string teken x tot teken y vervangen?
Dus niet een stuk string vervangen, maar echt van teken 3 t/m teken 15?
Offline Ultimatum - 23/03/2007 10:28
Avatar van Ultimatum PHP expert Wil je dus van een string alleen teken 3 t/m 15 pakken? Dat kan met substr()
Offline Thomas - 23/03/2007 11:12
Avatar van Thomas Moderator Je hoeft geen parser te schrijven om inhoud van verschillende tags anders te behandelen (want dat was wss de reden dat je alles wilt parsen?).
Offline Rens - 23/03/2007 11:40
Avatar van Rens Gouden medaille

Crew algemeen
@Ultimatum, ik weet dat het met substr kan.
Maar daarmee haal je de tekens op, en als je dan str_replace gebruikt, word die tekst herplaatst, als het er 1 keer instaat, 1 keer, maar staat het er vaker in, word het vaker herplaatst.

Dus stel je hebt zoiets:
  1. bla
  2. bla
  3. bla[/code[
  4. En je doet:
  5. [code]str_replace(subStr($sTekst, 0, 3), "", $sTekst);

Dan worden al die 'bla' vervangen.
En alleen teken 0 t/m 3 moet vervangen worden.
Dus er moet 2 keer bla blijven staan.

@FangorN:
Zoals ik het had parste hij maar 1 keer een code tag, en als hij dan 2 keer er in voor kwam, parste hij alleen de eerste, en niet de 2e.
Offline Ibrahim - 23/03/2007 14:52
Avatar van Ibrahim PHP expert dan gebruik je toch gewoon preg_match_all 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.23s