Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: BBCode
Forum PHP.pl > Forum > Gotowe rozwiązania
Fipaj
Oto ciekawy skrypt obsługi BBCode... Jest bardzo prosty, przez co łatwo dodawać nowe funkcje. Proszę o krytykę i pomysły na nowe funkcje smile.gif

  1. <?php
  2.  
  3. function bbcode ($ciag) {
  4.     // [kursywa]
  5.     $ciag = str_replace ('[kursywa]', '<i>', $ciag);
  6.     $ciag = str_replace ('[/kursywa]', '</i>', $ciag);
  7.  
  8.     // [podkreslenie]
  9.     $ciag = str_replace ('[podkreslenie]', '<u>', $ciag);
  10.     $ciag = str_replace ('[/podkreslenie]', '</u>', $ciag);
  11.  
  12.     // [pogrubienie]
  13.     $ciag = str_replace ('[pogrubienie]', '<b>', $ciag);
  14.     $ciag = str_replace ('[/pogrubienie]', '</b>', $ciag);
  15.  
  16.     // [rozmiar=\"x\"] (x = x pikseli)
  17.     $ciag = str_replace ('[rozmiar=\"', '<span style=\"font-size: ', $ciag);
  18.     $ciag = str_replace ('\"]', '\">', $ciag);
  19.     $ciag = str_replace ('[/rozmiar]', '</span>', $ciag);
  20.  
  21.     // [kolor=\"#FFFFFF\"] (#FFFFFF - kod szesnastkowy koloru)
  22.     $ciag = str_replace ('[kolor=\"', '<span style=\"color: ', $ciag);
  23.     $ciag = str_replace ('\"]', '\">', $ciag);
  24.     $ciag = str_replace ('[/kolor]', '</span>', $ciag);
  25.  
  26.     // [obraz=\"http://localhost/\" /] (zamiast http://localhost URL lub URI, pamiętaj o / na końcu!)
  27.     $ciag = str_replace ('[obraz=\"', '<img alt=\"\" src=\"', $ciag);
  28.     $ciag = str_replace ('\" /]', '\" />', $ciag);
  29.  
  30.     // [link=\"http://localhost/\"] (zamiast http://localhost URL lub URI)
  31.     $ciag = str_replace ('[link=\"', '<a href=\"', $ciag);
  32.     $ciag = str_replace ('[/link]', '</a>', $ciag);
  33.  
  34.     // [email=\"fipaj@poczta.onet.pl\"] (zamiast fipaj@poczta.onet.pl wpisz adres e-mail)
  35.     $ciag = str_replace ('[email=\"', '<a href=\"mailto:', $ciag);
  36.     $ciag = str_replace ('[/email]', '</a>', $ciag);
  37.  
  38.     // [gg=\"4953847\"] (zamiast 4953847 numer GG)
  39.     $ciag = str_replace ('[gg=\"', '<a href=\"gg:', $ciag);
  40.     $ciag = str_replace ('[/gg]', '</a>', $ciag);
  41.  
  42.     // [skype=\"fipaj_lokonet\"] (zamiast fipaj_lokonet swój skype_id)
  43.     $ciag = str_replace ('[skype=\"', '<a href=\"callto:', $ciag);
  44.     $ciag = str_replace ('[/skype]', '</a>', $ciag);
  45.  
  46.     return $ciag;
  47. }
  48.  
  49. print bbcode('ten tekst będzie [pogrubienie]pogrubiony[/pogrubienie], dodatkowo jak sie ktoś postara, to i [podkreslenie] podkreślony[/podkreslenie], zaś dla mistrzów w temacie, poleca sie rownież użycie [kursywa]ku
    rsywy[/kursywa]. a oto [link=\"link...\"]hiperłącze![/link]. [kolor=\"darkred\"]zdaje mi się, że bbcode działa![/kolor]'
    );
  50.  
  51. ?>
czachor
IMHO trochę wyważasz otwarte drzwi... Swego czasu @BzikOS zrobił bardzo dobrą funkcję bb2html() która spełnia część zadań Twojej, a specjalnie trudna w rozbudowie nie jest...

No i zobacz, że poprawna do końca Twoja nie jest:
  1. <?php
  2. echo bbcode('[link=\"error\"]tu nie powinno być urla [link=\"x.com\"]x.com[/link] no i blabla');
  3. ?>

PS. No i czego takiego długie nazwy... "[pogrubienie]"?? nie lepiej zwykłe zaczerpnięte z html'a "[b]"?
Nie wiem też, czy użycie tyle razy str_replace() jest optymalną metodą... Chyba lepsza jest ta metoda @BzikOS'a z jednym wyrażeniem regularnym...
tiraeth
Jeżeli chcesz ocenę swojej funkcji (?) to proszę:
~ wykorzystanie str_replace zamiast wyrażeń regularnych [-]
~ możliwość dodawania dodatkowych kodów/elementów [+]
~ możliwość zamulenia kodu (przykład 1) [-]
~ niebezpieczeństwo z kodem [obraz][/obraz] (przykład 2) [-]

wyliczenie: 5-3+1=3/9 czyli 2/6 a więc DWÓJA....

przykład 1
  1. <?php
  2. echo bbcode('[link=\"url.txt\">a</a><script language=\"JavaScript\">alert('I co teraz??');</script>\"]I co teraz??');
  3. ?>


przykład 2
  1. <?php
  2. echo bbcode('[obraz=\"index.php?action=logout\"]No i uzytkownik jest wylogowany');
  3. ?>
Fipaj
Cytat
No i czego takiego długie nazwy
- każdy może sobie zmienić.



  1. <?php
  2.  
  3. function bbcode ($ciag) {
  4. // [kursywa]
  5. $ciag = str_replace ('[kursywa]', '<i>', $ciag);
  6. $ciag = str_replace ('[/kursywa]', '</i>', $ciag);
  7.  
  8. // [podkreslenie]
  9. $ciag = str_replace ('[podkreslenie]', '<u>', $ciag);
  10. $ciag = str_replace ('[/podkreslenie]', '</u>', $ciag);
  11.  
  12. // [pogrubienie]
  13. $ciag = str_replace ('[pogrubienie]', '<b>', $ciag);
  14. $ciag = str_replace ('[/pogrubienie]', '</b>', $ciag);
  15.  
  16. // [rozmiar=\"x\"] (x = x pikseli)
  17. $ciag = str_replace ('[rozmiar=\"', '<span style=\"font-size: ', $ciag);
  18. $ciag = str_replace ('\"]', '\">', $ciag);
  19. $ciag = str_replace ('[/rozmiar]', '</span>', $ciag);
  20.  
  21. // [kolor=\"#FFFFFF\"] (#FFFFFF - kod szesnastkowy koloru)
  22. $ciag = str_replace ('[kolor=\"', '<span style=\"color: ', $ciag);
  23. $ciag = str_replace ('\"]', '\">', $ciag);
  24. $ciag = str_replace ('[/kolor]', '</span>', $ciag);
  25.  
  26. // [obraz=\"http://localhost/\" /] (zamiast http://localhost URL lub URI, pamiętaj o / na końcu!)
  27. if (!ereg ('[obraz=\"http://www.zablokowany_adres.pl', $ciag)) {
  28. $ciag = str_replace ('[obraz=\"', '<img alt=\"\" src=\"', $ciag);
  29. $ciag = str_replace ('\" /]', '\" />', $ciag);
  30. }
  31.  
  32. // [link=\"http://localhost/\"] (zamiast http://localhost URL lub URI)
  33. if (!ereg ('<script', $ciag)) {
  34. $ciag = str_replace ('[link=\"', '<a href=\"', $ciag);
  35. $ciag = str_replace ('[/link]', '</a>', $ciag);
  36. }
  37.  
  38. // [email=\"fipaj@poczta.onet.pl\"] (zamiast fipaj@poczta.onet.pl wpisz adres e-mail)
  39. $ciag = str_replace ('[email=\"', '<a href=\"mailto:', $ciag);
  40. $ciag = str_replace ('[/email]', '</a>', $ciag);
  41.  
  42. // [gg=\"4953847\"] (zamiast 4953847 numer GG)
  43. $ciag = str_replace ('[gg=\"', '<a href=\"gg:', $ciag);
  44. $ciag = str_replace ('[/gg]', '</a>', $ciag);
  45.  
  46. // [skype=\"fipaj_lokonet\"] (zamiast fipaj_lokonet swój skype_id)
  47. $ciag = str_replace ('[skype=\"', '<a href=\"callto:', $ciag);
  48. $ciag = str_replace ('[/skype]', '</a>', $ciag);
  49.  
  50. // [cytat]
  51. $ciag = str_replace ('[cytat]', '<div style=\"background-color:lightgrey; border:1px solid gray;\">', $ciag);
  52. $ciag = str_replace ('[/cytat]', '</div>' $ciag);
  53.  
  54. // [ip=\"\"]
  55. $ciag = str_replace ('[ip=\"', '<a href=\"http://www.ripe.net/fcgi-bin/whois?form_type=simple&full_query_string=&searchtext=', $ciag);
  56. $ciag = str_replace ('[/ip]', '</a>', $ciag);
  57.  
  58. // [lista]
  59. $ciag = str_replace ('[lista]', '<ul>', $ciag);
  60. $ciag = str_replace ('[/lista]', '</ul>', $ciag);
  61.  
  62. // [punkt]
  63. $ciag = str_replace ('[punkt]', '<li>', $ciag);
  64. $ciag = str_replace ('[/punkt]', '</li>', $ciag);
  65.  
  66. // [kod]
  67. $ciag = str_replace ('[orientacja=\"', '<div style=\"text-align:', $ciag);
  68. $ciag = str_replace ('[/orientacja]', '</div>', $ciag);
  69.  
  70. // [czcionka]
  71. $ciag = str_replace ('[czcionka=\"', '<span style=\"font-family:', $ciag);
  72. $ciag = str_replace ('[/czcionka]', '</span>', $ciag);
  73.  
  74. // [tytul]
  75. $ciag = str_replace ('[tytul]', '<h1>', $ciag);
  76. $ciag = str_replace ('[/tytul]', '</h1>', $ciag);
  77.  
  78. // [linia /]
  79. $ciag = str_replace ('[linia /]', '<hr />', $ciag);
  80.  
  81. return $ciag;
  82. }
  83.  
  84. ?>


poprawione bezpieczeństwo dodane nowe funkcje.

mam jednak problem: chciałem zrobić tag [php], wykorzystując highlight_string, ale za bardzo nie wiem jak...
legorek
Jak ktoś szuka prostej i bezpiecznej funkcji obsługującej podstawowe tagi (b, u, i) to proponuje cos takiego:

  1. <?php
  2. function bbcode($text)
  3. {
  4. $ret = preg_replace(&#092;"/(.*)(.*)(.*)/i\", '1<b>2</b>3', $text);
  5. $ret = preg_replace(&#092;"/(.*)(.*)(.*)/i\", '1<i>2</i>3', $ret);
  6. $ret = preg_replace(&#092;"/(.*)(.*)(.*)/i\", '1<u>2</u>3', $ret);
  7. return($ret);
  8. }
  9.  
  10. ?>


Można łatwo dodwać następne (pre, center, itd)
NuLL
Jak dla mnie funkcja Fipaja jest bezużyteczna. Po co komu coś takiego questionmark.gif Narazie proponuję tagi paramrtryczne typu
Kod
[link='www.php.pl' type='lnk_1']Link do php.pl[/link]

Jak bedzie supportować coś takiego możemy pomyśleć o napisaniu jakieś opinii bo narazie nie ma o czym.

PS. Jak tam twój ambitny projekt fFCode questionmark.gif CZyzby to był wstęp questionmark.gif snitch.gif
Fipaj
Cytat
PS. Jak tam twój ambitny projekt fFCode questionmark.gif CZyzby to był wstęp questionmark.gif


mój ambitny projekt ffcode jest w trakcie realizacji smile.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.