login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[PHP REGEX] Functie in preg_replace

Offline AgentX - 18/10/2010 11:44 (laatste wijziging 19/10/2010 08:33)
Avatar van AgentXHTML beginner Hallo mensen,

Ik ben op dit moment bezig met een UBB-scriptje. Dit script zorgt onder andere voor het vet maken van teksten en automatische links. Wat ik nu wil is een string laten veranderen in een afbeelding als volgt:

  1. Input:
  2. [img:plaatje.png|Onderschrift]
  3.  
  4. <!-- Zoals je ziet gebeurt dit een beetje zoals op Wikipedia. -->
  5.  
  6. Output:
  7. <div class="image">
  8. <img src="plaatje.png">
  9.  
  10. Onderschrift
  11. </div>


Om de afbeelding in een DIV met bijbehorende beschrijving weer te geven heb ik een functie die in de class voor mijn systeem zit:

  1. class kbblog{
  2. public function image($src, $description){
  3. echo "<div class=\"image\">
  4. <img src=\"" . $src . "\" />
  5. <br>
  6. $description
  7. </div>";
  8. }
  9. }
  10.  
  11. $kbblog = new kbblog();


Om de tekst te laten veranderen roep ik de functie aan:

  1. public function text($text){
  2. $text = preg_replace("#\[img:(.+?)|(.+?)\]#si", $this->image("$1", "$2"), $text);
  3.  
  4. return nl2br($text);
  5. }


Helaas werkt het niet: ik krijg een afbeelding met als bron "$1":

  1. <img src="$1">


Hoe kan ik een functie in preg_replace() gebruiken?

2 antwoorden

Gesponsorde links
Offline Koen - 19/10/2010 08:13
Avatar van Koen PHP expert
  1. public function text($text)
  2. {
  3. $text = preg_replace("#\[img:(.+?)\]#sei", '$this->image("\\1", "\\2")', $text);
  4.  
  5. return nl2br($text);
  6. }

Gebruik de "e" flag.
Offline AgentX - 19/10/2010 08:55 (laatste wijziging 09/03/2011 14:50)
Avatar van AgentX HTML beginner Ik heb het nu op een andere manier opgelost, en dat werkt. Ik heb het hele script inmiddels al verbouwd, dus het heeft niet zo'n zin om het hier te posten. Thanks anyway! 

Edit: ik wil hier toch even terug komen, ik heb nu een gelijksoortig script, maar de e-flag helpt niet.

  1. $text = preg_replace("#\[img:\"(.+?)\",\"(.+?)\"]#sei", $this->img("\\1","\\2"), $text);
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.208s