[PHP] tekst vervangen met behulp van preg_match_all ...

Pagina: 1
Acties:
  • 235 views

Onderwerpen


  • b12e
  • Registratie: Augustus 2009
  • Laatst online: 12-09 15:05
Hoi

Ik ben bezig met een redelijk groot project maar heb al sinds jaren last met preg_match en preg_replace functies

-> hulp nodig!

Ik heb dus bijvoorbeeld een hele lange tekst. In deze tekst staan enkele keren [lfoto]een base64 encoded string[/lfofo] en [rfoto]een andere string[/rfoto] vermeld. Nu die lfoto en rfoto vervangen door html tags is geen probleem, maar ik zou die base64 string moeten kunnen vervangen in de tekst door een gedecodeerde versie.

Kan iemand me alstublieft even hiermee helpen? Ik wil nu even geen gezeik van 'moet je zelf uitzoeken' en 'is dat alles dat je gedaan hebt' ofzoiets, ik weet dat ik met preg_match_all (preg_replace_all bestaat niet denk ik?) en str_replace aan de slag moet, maar hoe is mij nog een vraag.

Alvast bedankt!

Bram

PS: het projectje is voor een stadsdienst in Brugge dus redelijk belangrijk.

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

b12e schreef op donderdag 09 september 2010 @ 19:11:
Kan iemand me alstublieft even hiermee helpen?
Natuurlijk kunnen we dat, we gaan het alleen niet voorkauwen. Ik mis code in dit topic. Wat heb je al geprobeerd? Waar zit het probleem precies? Kan je de expression niet schrijven, of doet de regex die je nu hebt gewoon niet precies wat je wil?
Ik wil nu even geen gezeik van 'moet je zelf uitzoeken' en 'is dat alles dat je gedaan hebt' ofzoiets
Gezeik krijg je hier nooit, hoogstens wat gratis sluitwerk.

Anyone who gets in between me and my morning coffee should be insecure.


  • Ulster Seedling
  • Registratie: December 2007
  • Laatst online: 11:14

Ulster Seedling

“Middelgrote appel”

Kan je iets met dit stukje code?

PHP:
1
2
3
<?php
$text = preg_replace('#\[foto](.+?)\[/foto]#sie', 'base64_decode(\'\\1\')', $text);
?>


Geen idee of het werkt, maar ik heb een vergelijkbare snippet ooit zelf gekregen als antwoord op een vergelijkbare vraag.

“(…) met een rode blos op een geelgroene ondergrond.” Volgens Wikipedia tenminste.


  • Matis
  • Registratie: Januari 2007
  • Laatst online: 10:43

Matis

Rubber Rocket

Door je regexp af te sluiten met een e, kun je je match evalueren alvorens je hem vervangt.
Als je de match dan door een decode-functie heen haalt, dan staat daar weer een originele string.

Edit; zoals hierboven voorgekauwd wordt :X

[ Voor 11% gewijzigd door Matis op 09-09-2010 19:24 ]

If money talks then I'm a mime
If time is money then I'm out of time


  • b12e
  • Registratie: Augustus 2009
  • Laatst online: 12-09 15:05
MueR schreef op donderdag 09 september 2010 @ 19:19:
[...]

Natuurlijk kunnen we dat, we gaan het alleen niet voorkauwen. Ik mis code in dit topic. Wat heb je al geprobeerd? Waar zit het probleem precies? Kan je de expression niet schrijven, of doet de regex die je nu hebt gewoon niet precies wat je wil?


[...]

Gezeik krijg je hier nooit, hoogstens wat gratis sluitwerk.
tuurlijk krijg ik geen gezeik. </sarcasme>

code:
1
2
3
while (preg_match('#\[rfoto\](.*?)\[/rfoto\]#', $arrArtikels[$id]["text"], $match)) {
    $arrArtikels[$id]["text"] = preg_replace('#\[rfoto\](.*?)\[/rfoto\]#', "<img class=\"textFoto\" style=\"float: right; padding-left: 20px; padding-bottom: 5px;\" src=\"".base64_decode($match[1])."\" />", $arrArtikels[$id]["text"], 1);
}


Dit had ik al, maar doet niet veel :(

Edit: heb het aan de praat gekregen mits een beetje hulp van jhogervorst, bedankt!

[ Voor 5% gewijzigd door b12e op 09-09-2010 19:29 ]


  • pedorus
  • Registratie: Januari 2008
  • Niet online
De 'e'-optie is trager en minder duidelijk dan preg_replace_callback.

Verder is dit imo beschamend als dit voor de Belgische overheid zou zijn; in Nederland kennen wij dingen als http://www.drempelvrij.nl/, en bijvoorbeeld een alt-tag is dus verplicht. Daarnaast doet dit draadje mij net iets te hobby-achtig aan. :p Is trouwens de naam base64-encoded, of de inhoud van het bestand? Het laatste lijkt me logischer, en dan wil je dat bestand gewoon onder een aparte url hebben.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
b12e schreef op donderdag 09 september 2010 @ 19:26:
[...]


tuurlijk krijg ik geen gezeik. </sarcasme>
Tuurlijk niet :Y)
Ook voor jou geldt gewoon onze Quickstart.
Give a man a fish and feed him for a day. Teach a man how to fish and feed him for a lifetime.

[ Voor 71% gewijzigd door RobIII op 09-09-2010 20:12 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1

Dit topic is gesloten.