Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> BBcode wywołujący funkcje php
voot
post 22.10.2013, 11:21:11
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 16.05.2010

Ostrzeżenie: (0%)
-----


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ę?
Go to the top of the page
+Quote Post
nospor
post 22.10.2013, 11:32:09
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




showForm('\1')\
Ten kod to natychmiastowe wywolanie funkcji showForm z parametrem \1 ....

Takie rzeczy robi sie przy pomocy preg_replace_callback


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Turson
post 22.10.2013, 11:50:10
Post #3





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


http://forum.php.pl/index.php?showtopic=221324&st=40 wink.gif
Go to the top of the page
+Quote Post
voot
post 22.10.2013, 11:58:02
Post #4





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 16.05.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.07.2025 - 04:55