Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> BBCode, działający skrypt
Fipaj
post 28.02.2005, 14:46:17
Post #1





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 19.01.2005
Skąd: Warszawa

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


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. ?>


Ten post edytował Fipaj 28.02.2005, 14:55:28


--------------------
Go to the top of the page
+Quote Post
czachor
post 28.02.2005, 15:40:09
Post #2





Grupa: Zarejestrowani
Postów: 897
Pomógł: 40
Dołączył: 16.12.2003
Skąd: Warszawa

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


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...

Ten post edytował czachor 28.02.2005, 15:43:33


--------------------
how many SEO experts does it take to change a light bulb,lightbulb,light,bulb,lamp,lighting,switch,sex,xxx
5-Reasons-why-you-should-NEVER-fix-a-computer-for-free
Go to the top of the page
+Quote Post
tiraeth
post 28.02.2005, 16:01:43
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


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. ?>


Ten post edytował Tiraeth 28.02.2005, 16:02:17
Go to the top of the page
+Quote Post
Fipaj
post 28.02.2005, 17:07:06
Post #4





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 19.01.2005
Skąd: Warszawa

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


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...

Ten post edytował Fipaj 1.03.2005, 14:33:48


--------------------
Go to the top of the page
+Quote Post
legorek
post 1.03.2005, 18:56:03
Post #5





Grupa: Zarejestrowani
Postów: 411
Pomógł: 35
Dołączył: 27.06.2004
Skąd: Kraków

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


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)


--------------------
Go to the top of the page
+Quote Post
NuLL
post 1.03.2005, 20:47:12
Post #6





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


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


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
Fipaj
post 2.03.2005, 13:09:33
Post #7





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 19.01.2005
Skąd: Warszawa

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


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


--------------------
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: 13.06.2025 - 05:19