Multidesk.be » Forums » PHP » functie gebruiken tijdens preg_replace()

  • Pagina
  • 1 van 1
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door Simon op donderdag 25 september 2008 om 22:19:15.
Simon's avatar
Multiviteit: 3742
Om de bb-code om te zetten gebruik ik preg_replace() met 2 arrays. Eén array met de bb-code en één array met de html-code.
In die bb-code bevindt zich een tag: [foto] die gebruikt kan worden om foto's vanop de website weer te geven (in bijvoorbeeld een nieuwsbericht). De naam van de foto moet opgegeven worden tussen de tags. In de html array wordt alles dan in orde gebracht via een aparte functie die de naam van de foto als argument meekrijgt.

Die functie kan echter zijn werk niet doen omdat het argument (doorgegeven als \\1) geïnterpreteerd wordt als \1 en dat is geen naam van een foto.

Als ik gewoon rechtstreeks een bestaande fotonaam ingeef, dan geeft hij wel alles goed weer.
Mijn vraag is dus: Kan ik een functie aanroepen, in een preg_replace() functie?

PHP
  1. <?php
  2.  
  3. //array opstellen met BB-codes
  4. $bb_code =
  5.         array(  '...',
  6.                 '#\[foto\](.*)\[/foto\]#iUs'
  7.         );
  8.                        
  9.  
  10. //html-codes
  11. $html_code =
  12.         array(  '...',
  13.                 '<div style="float:right";>' .$foto->geef_thumbnail_weer( '\1' ). '</div>'
  14.         );
  15.                
  16. //Alle bb-code in het bericht vervangen door de bijhorende HTML-code
  17. $output = preg_replace( $bb_code, $html_code, $input );
  18.  
  19. ?>
^ Reactie #1 geschreven door Martijn op vrijdag 26 september 2008 om 11:25:35.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Dat kan je zeker, gewoon de functie er inzetten zoals je normaal zou doen. Bijvoorbeeld:

PHP
  1. <?php
  2.  
  3. $arr[] = "'<a target=\"_blank\" href=\"http://www.example.com/'.urlencode('\1').'/\">\1</a>'";
  4.  
  5. ?>


In deze situatie roep je dus urlencode() op om ervoor te zorgen dat de inhoud van de link (in dit geval in /1, bijvoorbeeld bij
CODE
  1. [url]foo?blah=test[/url]
) goed weergegeven is volgens de standaarden (RFC-9386) en je hierop geen fouten krijgt.

Aanvulling

URL-code even tussen code-tags gezet zodat deze niet geparsed wordt ;-).[/code]
Deze tekst werd het laatst bewerkt voor 9.11 % door Martijn op vrijdag 26 september 2008 om 11:26:15.
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #2 geschreven door Simon op zaterdag 27 september 2008 om 20:33:08.
Simon's avatar
Multiviteit: 3742
Ik zie wel verandering. In de broncode zie ik nu dit terwijl tussen die div-tags eingelijk een afbeelding zou moeten tevoorschijn komen. Dat is toch wat die functie doet. De naam wordt nu dus wel doorgegeven, maar hij kan op één of andere manier de functie niet plaatsen. Ik krijg ook dit als foutmelding (en ik heb er wat rondgezocht, maar ik versta nog altijd niet wat het betekent).

Notice: Undefined property: Foto_random:: $geef_thumbnail_weer in ... (het slaat op de lijn waar de functie geef_thumbnail_weer() wordt aangeroepen.

CODE
  1. '<div style="float:right";>' .( 'afbeelding_naam' ). '</div>'


De php-code is inmiddels gewijzigd tot dit:
PHP
  1. <?php
  2.  
  3. //array opstellen met BB-codes
  4. $bb_code =
  5.         array(  '...',
  6.                 '#\[foto\](.*)\[/foto\]#iUs'
  7.         );
  8.  
  9. //we maken een object aan van de random_foto klasse
  10. //daarmee kunnen we de foto weergeven die tussen de foto-tags staat     
  11. require_once( _ROOT_PATH_. 'includes/klasses/parken/foto/foto_random.class.php' );
  12.  
  13. $foto = new Foto_random;
  14.  
  15. //html-codes
  16. $html_code =
  17.         array(  '...',
  18.                 "'<div style=\"float:right\";>' .$foto->geef_thumbnail_weer( '\1' ). '</div>'"
  19.         );
  20.                
  21. //Alle bb-code in het bericht vervangen door de bijhorende HTML-code
  22. $output = preg_replace( $bb_code, $html_code, $input );
  23.  
  24. ?>
^ Reactie #3 geschreven door Martijn op zaterdag 27 september 2008 om 20:59:46.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Probeer eens een methode aan te roepen buiten een class (functie dus); om te zien of dat wel gaat ;-). Vermoed dat het probleem zit bij het feit dat je een methode op een instantie van een class probeert aan te roepen.
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #4 geschreven door Simon op zondag 28 september 2008 om 19:53:40.
Simon's avatar
Multiviteit: 3742
Dat was inderdaad het probleem. Ik heb gewoon op de pagina een functie aangemaakt die die functie uit de klasse aanroept. Ik krijg de foutmelding niet meer, maar toch werkt er niets (dit is ook zo bij standaard php-functies).

Als ik de quotes weglaat ("), wordt de functie uitgevoerd (dat kan ik zien door een eenvoudige echo-test), maar wordt het argument doorgegeven als \1.
PHP
  1. <?php
  2.  
  3. '<div style=\"float:right\";>' .geef_thumbnail_weer_functie( '\1' ). '</div>'
  4.  
  5. //met als output
  6. //...niets...
  7.  
  8. ?>


Als ik de quotes laat staan ("), wordt de functie niet uitgevoerd, maar wordt het argument wel goed doorgegeven
PHP
  1. <?php
  2.  
  3. "'<div style=\"float:right\";>' .geef_thumbnail_weer_functie( '\1' ). '</div>'"
  4.  
  5. //met als output
  6. //'' .geef_thumbnail_weer_functie( 'afbeelding_naam.jpg' ). '
  7.  
  8. ?>


Op één of andere manier zou ik dus moeten een mix krijgen van de twee :).
Deze tekst werd het laatst bewerkt voor 4.45 % door Simon op zondag 28 september 2008 om 19:54:00.
^ Reactie #5 geschreven door Martijn op maandag 29 september 2008 om 07:32:24.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Hoe voer je je replaces net uit?
Kan je het volledige blok eens even meegeven voor de volledigheid?
Deze tekst werd het laatst bewerkt voor 1 % door Martijn op maandag 29 september 2008 om 07:34:30.
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #6 geschreven door Simon op maandag 29 september 2008 om 18:40:17.
Simon's avatar
Multiviteit: 3742
Ik maak een array met de mogelijk bb-codes en een array met de bijhorende html-codes. Die arrays plaats ik dan in een preg_replace() samen met de doeltekst.

Maar ik heb het probleem inmiddels opgelost. Door de modifier e toe te voegen aan de reguliere expressie kan je php gebruiken. Deze code werkt nu goed.

Alleszins bedankt!

PHP
  1. <?php
  2.  
  3. //array opstellen met BB-codes
  4. $bb_code =
  5. array(  '...',
  6.         '#\[foto\](.*)\[/foto\]#iUse'
  7. );
  8.                
  9. //html-codes
  10. $html_code =
  11. array(  '...',
  12.         "'<div style=\"float:right;margin:5px;\">' .geef_thumbnail_weer( '\1' ). '</div>'"
  13. );
  14.                
  15. //Alle bb-code in het bericht vervangen door de bijhorende HTML-code
  16. $output = preg_replace( $bb_code, $html_code, $input);
  17.  
  18. ?>
^ Reactie #7 geschreven door Martijn op maandag 29 september 2008 om 18:49:21.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Dat was hetvolgende wat ik wou vragen :-) (geloof het of niet :P).
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #8 geschreven door Simon op maandag 29 september 2008 om 19:57:50.
Simon's avatar
Multiviteit: 3742
Wel, ik geloof u :D!
  • Pagina
  • 1 van 1

Snel-antwoordformulier
Toon uitgebreid antwoordformulier Bericht nalezen Bericht plaatsen