Pomoc - Szukaj - U¿ytkownicy - Kalendarz
Pe³na wersja: Kolejny problem z BBcodem.
Forum PHP.pl > Forum > PHP
Macok
Ledwo co udalo mi sie odpalic bbcode na mojej stronie i juz mam problem.
Bledy powodowane sa tym ze wiadomosci w ktorych wystepuje bbcode pobierane sa z bazy danych forum phpbb by przemo. Problem polega na tym ze niektore tagi bbcode w bazie danych phpbb by przemo maja przypisane jakies wartosci (cos w stylu id) i post w bazie danych nie wygldada np. tak: przyklad tylko tak: [b:e7c9e3e71f]przyklad[/b] i moja strona nie rozpoznaje tego jako tag bbcode sad.gif Co zrobic aby rozwiazac ten problem??
Mystic007
Musisz dopisać wyrażenie regularne tak by pomijało ciąg występujący po dwukroptku. Jak nie możesz sobie z tym poradzić podaj kod.
Macok
Dzieki, oto kod: (a raczej czesc odpowiadajaca za bbcode)
  1. <?php 
  2. Function bbcode($zrodlo){
  3.  $zrodlo=trim($zrodlo);
  4.  $zrodlo=htmlspecialchars($zrodlo);
  5.  $zrodlo=preg_replace("#(.*?)?(.*?)#si", "<A HREF="12" TARGET="_blank">12</A>", $zrodlo);
  6.  $zrodlo=preg_replace("#(.*?)#si", "<A HREF="2" TARGET="_blank">3</A>", $zrodlo);
  7.  $zrodlo=preg_replace("#(.*?)#si", "<b>1</b>", $zrodlo);
  8. $zrodlo=preg_replace("#(.*?)#si", "<i>1</i>", $zrodlo);
  9. $zrodlo=preg_replace("#(.*?)#si", "<u>1</u>", $zrodlo);
  10. $zrodlo=preg_replace("#[small](.*?)[/small]#si", "<small>1</small>", $zrodlo);
  11. $zrodlo=preg_replace("#[big](.*?)[/big]#si", "<big>1</big>", $zrodlo);
  12. $zrodlo=preg_replace("#[p](.*?)[/p]#si", "<p>1</p>", $zrodlo);
  13. $zrodlo=preg_replace("#
    (.*?)
    #si"
    , "<center>1</center>", $zrodlo);
  14. $zrodlo=preg_replace("#(.*?)#si", "<span style="color:2">3</span>", $zrodlo);
  15. $zrodlo=preg_replace("#(.*?)#si", "<span style="font-size:2">3</span>", $zrodlo);
  16.  $zrodlo=preg_replace("#[hr=([0-9]{1,2}|100)]#si", "<hr class="linia" width="1%">", $zrodlo);
  17. $zrodlo=nl2br($zrodlo);
  18.  return $zrodlo;
  19. }
  20. ?>


Czy to wystarczy??
Mystic007
  1. <?php
  2. Function bbcode($zrodlo){
  3.  $zrodlo=trim($zrodlo);
  4.  $zrodlo=htmlspecialchars($zrodlo);
  5.  $zrodlo=preg_replace("#(.*?)?(.*?)#si", "<A HREF="12" TARGET="_blank">12</A>", $zrodlo);
  6.  $zrodlo=preg_replace("#(.*?)#si", "<A HREF="2" TARGET="_blank">3</A>", $zrodlo);
  7.  $zrodlo=preg_replace("#[b.{0,}](.*?)[/b]#si", "<b>1</b>", $zrodlo);
  8. $zrodlo=preg_replace("#[i.{0,}](.*?)[/i]#si", "<i>1</i>", $zrodlo);
  9. $zrodlo=preg_replace("#[u.{0,}](.*?)[/u]#si", "<u>1</u>", $zrodlo);
  10. $zrodlo=preg_replace("#[small](.*?)[/small]#si", "<small>1</small>", $zrodlo);
  11. $zrodlo=preg_replace("#[big](.*?)[/big]#si", "<big>1</big>", $zrodlo);
  12. $zrodlo=preg_replace("#[p](.*?)[/p]#si", "<p>1</p>", $zrodlo);
  13. $zrodlo=preg_replace("#
    (.*?)
    #si"
    , "<center>1</center>", $zrodlo);
  14. $zrodlo=preg_replace("#(.*?)#si", "<span style="color:2">3</span>", $zrodlo);
  15. $zrodlo=preg_replace("#(.*?)#si", "<span style="font-size:2">3</span>", $zrodlo);
  16.  $zrodlo=preg_replace("#[hr=([0-9]{1,2}|100)]#si", "<hr class="linia" width="1%">", $zrodlo);
  17. $zrodlo=nl2br($zrodlo);
  18.  return $zrodlo;
  19. }
  20. ?>


Powstawiałem to tylko w tagi B, U, I z tym ze [bs]text[/b] też zadziała. Napisz jeśli Ci to bardzo przeszkadza to może coś wykombinuję smile.gif Zależy czy zawsze będzie ten dwukropek a po nim ciąg znaków.
Macok
Dzieki!
Zaraz sprawdze jak dziala i dam edita! winksmiley.jpg

Niestety nie dziala.
Zamienialem po kolei wszystkie linijki i kiedy zamienilem ta:
  1. <?php
  2. $zrodlo=preg_replace("#[b.{0,}](.*?)[/b]#si", "<b>1</b>", $zrodlo);
  3. ?>


Przestalo dzialac. Zamiast tekst wyskakuje takie cos: [[/b]

Niewiem co jest nie tak. Wrzuce tu jeszcze raz dzialajacy kod
  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <?
  6. Function bbcode($zrodlo){
  7.  $zrodlo=trim($zrodlo);
  8.  $zrodlo=htmlspecialchars($zrodlo);
  9.  $zrodlo=preg_replace("#(.*?)?(.*?)#si", "<A HREF="12" TARGET="_blank">12</A>", $zrodlo);
  10.  $zrodlo=preg_replace("#(.*?)#si", "<A HREF="2" TARGET="_blank">3</A>", $zrodlo);
  11. $zrodlo=preg_replace("#(.*?)#si", "<b>1</b>", $zrodlo);
  12. $zrodlo=preg_replace("#(.*?)#si", "<i>1</i>", $zrodlo);
  13. $zrodlo=preg_replace("#(.*?)#si", "<u>1</u>", $zrodlo);
  14. $zrodlo=preg_replace("#[small](.*?)[/small]#si", "<small>1</small>", $zrodlo);
  15. $zrodlo=preg_replace("#[big](.*?)[/big]#si", "<big>1</big>", $zrodlo);
  16. $zrodlo=preg_replace("#[p](.*?)[/p]#si", "<p>1</p>", $zrodlo);
  17. $zrodlo=preg_replace("#
    (.*?)
    #si"
    , "<center>1</center>", $zrodlo);
  18. $zrodlo=preg_replace("#(.*?)#si", "<span style="color:2">3</span>", $zrodlo);
  19.  $zrodlo=preg_replace("#(.*?)#si", "<span style="font-size:2">3</span>", $zrodlo);
  20.  $zrodlo=preg_replace("#[img](.*?)[/img]#si", "<img src="1" border="0" alt="Obrazek" />", $zrodlo);
  21. $zrodlo=preg_replace("#[hr=([0-9]{1,2}|100)]#si", "<hr class="linia" width="1%">", $zrodlo);
  22. $zrodlo=nl2br($zrodlo);
  23.  return $zrodlo;
  24. }
  25. echo bbcode($_POST['kodzik']);
  26. ?>
  27. <? echo bbcode ('tekst') ?>
Kod powoduje wyswietlnie sie na stronie pogrubinego napisu tekst.
Przerobil bys mi powyzszy kod?? Byc moze ten ktory wrzucilem poprzednio byl uszkodzony!
Mystic007
Gdzie są wstawiane te ciagi cyfr i liter? tylko do pogrubienia, pochylenia oraz do podkreślenia?
Macok
Chyba do wszystkich tagow oprocz odsylacza, ale to nie jest raczej powodem bledow bo testowalem tylko tag [b]
Probowalem tez napisac: [b:][/b:] ale tez nie dziala.
Byc moze powodem jest to ze pierwszy kod ktory ci podalem jest chyba uszkodzony.
Ale ty tu jestes expertem tongue.gif

Edit:
Zamienilem jeszcze linijke odpowiadajaca za [i] po czym przetestowalem. Wystepowal identyczny blad.
A na twoim kompie to dzialalo??
Mystic007
  1. <?php
  2. Function bbcode($zrodlo){
  3.  $zrodlo=trim($zrodlo);
  4.  $zrodlo=htmlspecialchars($zrodlo);
  5.  $zrodlo = preg_replace("#(.*?)?(.*?)#si", "<A HREF="12" TARGET="_blank">12</A>", $zrodlo);
  6.  $zrodlo = preg_replace("#(.*?)#si", "<A HREF="2" TARGET="_blank">3</A>", $zrodlo);
  7. $zrodlo=preg_replace("#[b.{0,}](.*?)[/b]#si", "<b>1</b>", $zrodlo);
  8. $zrodlo=preg_replace("#[i.{0,}](.*?)[/i]#si", "<i>1</i>", $zrodlo);
  9. $zrodlo=preg_replace("#[u.{0,}](.*?)[/u]#si", "<u>1</u>", $zrodlo);
  10. $zrodlo=preg_replace("#[smal.{0,}](.*?)[/small]#si", "<small>1</small>", $zrodlo);
  11. $zrodlo=preg_replace("#[big.{0,}](.*?)[/big]#si", "<big>1</big>", $zrodlo);
  12. $zrodlo=preg_replace("#[p.{0,}](.*?)[/p]#si", "<p>1</p>", $zrodlo);
  13. $zrodlo=preg_replace("#[center.{0,}](.*?)[/center]#si", "<center>1</center>", $zrodlo);
  14. $zrodlo=preg_replace("#(.*?)#si", "<span style="color:2">3</span>", $zrodlo);
  15.  $zrodlo=preg_replace("#(.*?)#si", "<span style="font-size:2">3</span>", $zrodlo);
  16.  $zrodlo=preg_replace("#[img.{0,}](.*?)[/img]#si", "<img src="1" border="0" alt="Obrazek" />", $zrodlo);
  17. $zrodlo=preg_replace("#[hr=([0-9]{1,2}|100)]#si", "<hr class="linia" width="1%">", $zrodlo);
  18. $zrodlo=nl2br($zrodlo);
  19.  return $zrodlo;
  20. }
  21. ?>

Był problem przy robieniu linków naprawiłem to. dodaj to: .{0,} gdzie pojawiają sie te ciągi. Działa u mnie. Na forum pojawiają sie slashe muszisz je usunać.
Macok
Jak wpisuje tylko to co powiedziales to nic sie nie wyswietla.
A jak dodaje na koncu
  1. echo bbcode($_POST['kodzik']);
  2. ?>
  3. <? echo bbcode('[i:sfdsa]tekst[/i]') ?>
To wywala blad:
Kod
Warning: preg_replace() [function.preg-replace]: Compilation failed: unmatched parentheses at offset 19 in C:\XAMPP\xampp\htdocs\bbcode.php on line 21

Pewnie ja cos robie zle :/
Daje tu caly kod. Co jest w nim zle??
  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <?php
  6. Function bbcode($zrodlo){
  7.  $zrodlo=trim($zrodlo);
  8.  $zrodlo=htmlspecialchars($zrodlo);
  9.  $zrodlo = preg_replace("#(.*?)?(.*?)#si", "<A HREF="12" TARGET="_blank">12</A>", $zrodlo);
  10.  $zrodlo = preg_replace("#(.*?)#si", "<A HREF="2" TARGET="_blank">3</A>", $zrodlo);
  11. $zrodlo=preg_replace("#[b.{0,}](.*?)[/b]#si", "<b>1</b>", $zrodlo);
  12. $zrodlo=preg_replace("#[i.{0,}](.*?)[/i]#si", "<i>1</i>", $zrodlo);
  13. $zrodlo=preg_replace("#[u.{0,}](.*?)[/u]#si", "<u>1</u>", $zrodlo);
  14. $zrodlo=preg_replace("#[smal.{0,}](.*?)[/small]#si", "<small>1</small>", $zrodlo);
  15. $zrodlo=preg_replace("#[big.{0,}](.*?)[/big]#si", "<big>1</big>", $zrodlo);
  16. $zrodlo=preg_replace("#[p.{0,}](.*?)[/p]#si", "<p>1</p>", $zrodlo);
  17. $zrodlo=preg_replace("#[center.{0,}](.*?)[/center]#si", "<center>1</center>", $zrodlo);
  18. $zrodlo=preg_replace("#(.*?)#si", "<span style="color:2">3</span>", $zrodlo);
  19.  $zrodlo=preg_replace("#(.*?)#si", "<span style="font-size:2">3</span>", $zrodlo);
  20.  $zrodlo=preg_replace("#[img.{0,}](.*?)[/img]#si", "<img src="1" border="0" alt="Obrazek" />", $zrodlo);
  21. $zrodlo=preg_replace("#[hr=([0-9]{1,2}|100)]#si", "<hr class="linia" width="1%">", $zrodlo);
  22. $zrodlo=nl2br($zrodlo);
  23.  return $zrodlo;
  24. }
  25.  
  26.  
  27. <? echo bbcode('[i:sfdsa]tekst[/i]') ?>


Ej moze dasz tu caly kod wraz z elementem ktory wyswietli jakis przykladowy tekst?? Wtedy sobie poradze bez problemu winksmiley.jpg
Mystic007
To mi dzia³a na 100%, tobie te¿ powinno winksmiley.jpg
  1. <?
  2. Function bbcode($zrodlo){
  3.  $zrodlo=trim($zrodlo);
  4.  $zrodlo=htmlspecialchars($zrodlo);
  5.  $zrodlo = preg_replace("#(.*?)?(.*?)#si", "<A HREF="12" TARGET="_blank">12</A>", $zrodlo);
  6.  $zrodlo = preg_replace("#(.*?)#si", "<A HREF="2" TARGET="_blank">3</A>", $zrodlo);
  7. $zrodlo=preg_replace("#[b.{0,}](.*?)[/b]#si", "<b>1</b>", $zrodlo);
  8. $zrodlo=preg_replace("#[i.{0,}](.*?)[/i]#si", "<i>1</i>", $zrodlo);
  9. $zrodlo=preg_replace("#[u.{0,}](.*?)[/u]#si", "<u>1</u>", $zrodlo);
  10. $zrodlo=preg_replace("#[small.{0,}](.*?)[/small]#si", "<small>1</small>", $zrodlo);
  11. $zrodlo=preg_replace("#[big.{0,}](.*?)[/big]#si", "<big>1</big>", $zrodlo);
  12. $zrodlo=preg_replace("#[p.{0,}](.*?)[/p]#si", "<p>1</p>", $zrodlo);
  13. $zrodlo=preg_replace("#[center.{0,}](.*?)[/center]#si", "<center>1</center>", $zrodlo);
  14. $zrodlo=preg_replace("#(.*?)#si", "<span style="color:2">3</span>", $zrodlo);
  15.  $zrodlo=preg_replace("#(.*?)#si", "<span style="font-size:2">3</span>", $zrodlo);
  16.  $zrodlo=preg_replace("#[img.{0,}](.*?)[/img]#si", "<img src="1" border="0" alt="Obrazek" />", $zrodlo);
  17. $zrodlo=preg_replace("#[hr=([0-9]{1,2}|100)]#si", "<hr class="linia" width="1%">", $zrodlo);
  18. $zrodlo=nl2br($zrodlo);
  19.  return $zrodlo;
  20. }
  21. echo bbcode($_POST['kodzik']);
  22. ?>
  23. <? echo bbcode ('tekst') ?>
  24. <? echo bbcode ('[u:Asa234s]tekst[/u]') ?>
  25. <? echo bbcode ('tekst') ?>
  26. <? echo bbcode ('[i:Asa234s]tekst[/i]') ?>
  27. <? echo bbcode ('tekst') ?>
  28. <? echo bbcode ('[b:Asa234s]tekst[/b]') ?>
Macok
Ten kod powyzej nie dzialal wiec zrobilem tak jak mowiles. Tam gdzie sa te ciagi znakow wkleilem : .{0,}.
Zadzialalo ale z dziwnymi bledami. Np. jak wklejam kod w ktorym jest duzo tagow bbcode to wyswietla sie zalozmy tylko 1 z nich a tekst i reszta tagow juz nie sad.gif oto caly kod. Jest cos w nim nie tak?? powinien chyba dzialac :/
  1. <?php
  2.  
  3. // bbcode
  4. Function bbcode($str){
  5.  
  6. // usun zbedne
  7. $str=htmlspecialchars(trim($str));
  8.  
  9. // Obrazek
  10. $str = preg_replace("#[img.{0,}](.*?)[/img.{0,}]#si", "<img src="1" border="0" alt="Obrazek" />", $str);
  11.  
  12. // Pogrubiony tekst
  13. $str = preg_replace("#[b.{0,}](.*?)[/b.{0,}]#si", "<b>1</b>", $str);
  14.  
  15. // Pochylony tekst
  16. $str = preg_replace("#[i.{0,}](.*?)[/i.{0,}]#si", "<i>1</i>", $str);
  17.  
  18. // Podkre¶lony tekst
  19. $str = preg_replace("#[u.{0,}](.*?)[/u.{0,}]#si", "<u>1</u>", $str);
  20.  
  21. // kolejny wiersz
  22. $str=nl2br($str);
  23.  
  24. // js
  25. $str = preg_replace_callback("#<(.*?)javascript(.*?)>#si", "bbcode_js", $str);
  26.  
  27. // wynik
  28. return $str;}
  29.  
  30.  
  31.  
  32. // anti js
  33. Function bbcode_js($str){
  34. if(!eregi('<a href="java script:mailto:mail('',$str[0])){
  35. return str_replace('javascript','java_script',$str[0]);
  36. }else{return $str[0];}}
  37.  
  38.  
  39. ?>
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.