Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: BBcode wywołujący funkcje php
Forum PHP.pl > Forum > PHP
voot
Witam, chciałem napisać prostą funkcję bbcode, zawierającą podstawowe znaczniki i jeden dodatkowy wywołujący inną funkcję, jej kod:

  1. function bbcode($text){
  2.  
  3. //$text = preg_replace('\[form](.*?)\[/form]', ''.showForm('1').'', $text);
  4. $patterns = array
  5. (
  6. '|\[b\](.*?)\[/b\]|i',
  7. '|\[i\](.*?)\[/i\]|i',
  8. '|\[u\](.*?)\[/u\]|i',
  9. '|\[color=([a-z]+)\](.*?)\[/color\]|i',
  10. '|\[size=([0-9]+)\](.*?)\[/size\]|i',
  11. '|\[url=(http://)?(.+?)\](.*?)\[/url\]|i',
  12. '|\[form\]([0-9])\[/form\]|i'
  13.  
  14. );
  15. $replacements = array
  16. (
  17. '<span style="font-weight: bold;">\1</span>',
  18. '<span style="font-style: italic;">\1</span>',
  19. '<span style="text-decoration: underline;">\1</span>',
  20. '<span style="color: \1;">\2</span>',
  21. '<span style="font-size: \1px;">\2</span>',
  22. '<a href="http://\2">\3</a>',
  23. showForm('\1')
  24.  
  25. );
  26. $text = str_replace("\n", '<br>', trim($text));
  27. $text = preg_replace($patterns, $replacements, $text);
  28. return $text;
  29. }




Przy użyciu znacznika [form]2[/form] (2 pomiędzy znacznikami form to parametr $id funkcji showForm), funkcja showForm nie działa poprawnie, ponieważ $id wynosi \1, a powinno być 2.
Nie wiem jak rozwiązać ten problem, może ma ktoś jakąś propozycję?
nospor
showForm('\1')\
Ten kod to natychmiastowe wywolanie funkcji showForm z parametrem \1 ....

Takie rzeczy robi sie przy pomocy preg_replace_callback
voot
Dziękuję za pomoc, napisałem to tak:

  1. $text = "[form]2[/form]";
  2.  
  3. function bbform($text)
  4. {
  5. $form = '#\[form]((?:[^[]|\[(?!/?form])|(?R))+)\[/form]#';
  6.  
  7. if (is_array($text)) {
  8. $text = showForm($text[1]);
  9. }
  10.  
  11. return preg_replace_callback($form, 'bbform', $text);
  12. }
  13.  
  14. $formularz = bbform($text);
  15. echo $formularz;


Wszystko działa wink.gif.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.