Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [klasa] Zaawansowany parser bbcode (php5), advanced bbcode parser
wookieb
post
Post #1





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Projekt jest już na githubie pod adresem
https://github.com/wookieb/bbcode

Proszę o dodawanie informacji o bugach właśnie tam.

UPDATE Wersja 1.2
[php bbcode, parser bbcode, advanced bbcode parser]
Chciałbym dziś zaprezentować swój mechanizm parsujący kod bbcode oraz ułatwiający nam kontrolę nad tym czy tagi są prawidłowo używane.
Klasa do pobrania:
https://github.com/wookieb/bbcode/zipball/master

Przykład działania:
http://wookieb.pl/bbcode/test.php

Readme.html w paczce oraz pod adresem http://wookieb.pl/bbcode/readme.html


Licencja
Skrypt wydany na licencji BSD. Dla własnego jak i komercyjnego użytku.

Ustawienia parsera
Ustawienia dla parsera znajdują się teraz w klasie BbCodeSettings. Ciekawsze z ustawień to

Zaufany kod
  1. $settings->trustText = false; // kod niezaufany
  2. $settings->trustText = true; // kod zaufany


Ustawienie kontroluje stopień sprawdzenia danych. Gdy kod bbcode sparsowaliśmy wcześniej to pobieramy jest wersję zaufaną i zapisujemy.
  1. $code = $bbcode->getBbcode();


Przy ponownym odczytaniu kodu, możemy oznaczyć kod jak zaufany. Spowoduje to ominięcie wielu operacji kontroli atrybutów, przez co parsowanie jest szybsze.

Kod
$bbcode = new BbCode();

$text='[b] Bla Bla [i] Hehe';
$bbcode->parse($text, false); // nie chcemy wyniku wiec ustawiamy na false
$code=$bbcode->getBbcode(); // [b] Bla Bla [i] Hehe[/i][/b]

// $code zapisujemy


// po pewnym czasie odczytujemy i parsujemy go jeszcze raz
$bbcode->getSettings()->trustText = true;
echo $bbcode->parse($code);


Dostępność tagów
Możliwe jest włączenie tylko niektórych tagów parsera

Kod
$bbcode = new BbCode();
$text = '[b]Pogrubienie[/b]
[i]Kursywa[/i]';

echo $bbcode->parse($text);
// <b>Pogrubienie</b>
// <i>Kursywa</i>

$bbcode->getSettings()->availableTags = array('b');
echo $bbcode->parse($text);
// <b>Pogrubienie</b>
// Kursywa



Walidacja HTML (kolejności użycia)
Domyślnie parser poprawia kolejność użycia tagów.
np kod
Kod
[b] pogrubienie [i] Kursywa[/b]
[ul]
    [li]Element listy
[/b]
[/i]

Zamieni na

Kod
[b] pogrubienie [i] Kursywa[/i][/b]
[ul]
    [li]Element listy[/li]
[/ul]


Tworzenie zajawek
Parser potrafi tworzyć zajawke o odpowiedniej ilości znaków (ignorując przy tym tagi bbcode).
Wspiera różne kodowania.

Test pod adresem http://wookieb.pl/bbcode/cut_test.php


Rozszerzanie możliwości
Za pomocą tworzenia nowych tagów i dodawania ich specjalnych ustawień można rozszerzyć bbcode o dodatkowe tagi, możliwości.
Szczególnie chciałbym zwrócić uwage na możliwość "przetrzepania" kodu przez funkcje filtrów, dzięki którym możemy tworzyć zaawansowane zależności.
Informacje na temat ustawień dostępne pod linkiem http://wookieb.pl/bbcode/readme.html

ZACHĘCAM DO OCEN, WNOSZENIA WŁASNYCH UWAG A TAKŻE PROPOZYCJI ZMIAN
Mam nadzieję, że przyda się niejednej osobie, która dostrzeże możliwości użycia parsera NIE TYLKO do Bbcode (IMG:style_emoticons/default/smile.gif) i nie tylko.

Update - 2009.05.31
Dodałem tag youtube do paczki.


Inne zmiany:
- poprawiony generowany kod html dla taga IMG
- poprawiona metoda wyszukiwania nazwy taga
- poprawiona szybkość działania
- przeniesienie ustawień do BbCodeSettings
- poprawiona walidacji urli
- dodatkowe zabezpieczenia przed XSS

Ten post edytował wookieb 23.08.2011, 19:46:20
Powód edycji: [wookieb]: [wookieb]: [Spawnm]: update
Go to the top of the page
+Quote Post
12 Stron V  « < 9 10 11 12 >  
Start new topic
Odpowiedzi (200 - 219)
boro11
post
Post #201





Grupa: Zarejestrowani
Postów: 283
Pomógł: 11
Dołączył: 9.07.2010
Skąd: Warszawa

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


Witam!
Od jakiegoś czasu używam Twojego parsera i jestem z niego bardzo zadowolony, ale mam jeden problem.

Podczas kopiowania tekstu zachowuje się jego formatowanie np. tekst:
Cytat
Hello Vic!
Website status is updated during refback adding so just wait till we get payment from that website. Your clicks is counted even if your status is "Pending" so don't worry you will be paid for each click you made.

Thank you for choosing RefbackBank.com and have a wonderful day. If you have any questions, please contact us at any time.

Best regards,
Boro
https://www.refbackbank.com


Skopiowałem ze swojego sytemu helpdesk, po wklejeniu na forum otrzymałem:

Cytat
Hello Vic!
[*font="Verdana Geneva Arial Helvetica sans-serif"]Website status is updated during refback adding so just wait till we get payment from that website. Your clicks is counted even if your status is \"Pending\" so don\'t worry you will be paid for each click you made.[/font]

[*font="Verdana Geneva Arial Helvetica sans-serif"]Thank you for choosing RefbackBank.com and have a wonderful day. If you have any questions, please contact us at any time. [/font]

[*font="Verdana Geneva Arial Helvetica sans-serif"]Best regards, [/font]
[*font="Verdana Geneva Arial Helvetica sans-serif"]Boro[/font]
[*font="Verdana Geneva Arial Helvetica sans-serif"]https://www.refbackbank.com[/font]


Poszukałem trochę i znalazłem opcje $removeInvalidTags - która jest domyślnie ustawiona na true ( i jest tak u mnie) co powinno zlikwidować problem tagów które nie istnieją, jednak mimo wszystko pojawiają się one. Co można zrobić żeby temu zaradzić zakładając, że nie chce dać możliwości zmiany czcionki użytkownikom?


Ps. Oczywiście znaków * nie ma, ale je dodałem bo to forum tego problemu nie ma jak się okazuję i zmienia na inne fonty (IMG:style_emoticons/default/smile.gif)

Ten post edytował boro11 3.04.2013, 20:41:41
Go to the top of the page
+Quote Post
wookieb
post
Post #202





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Faktycznie był mały błąd w parserze. Poprawione - wersja na githubie (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
boro11
post
Post #203





Grupa: Zarejestrowani
Postów: 283
Pomógł: 11
Dołączył: 9.07.2010
Skąd: Warszawa

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


Teraz działa idealnie dziękuję (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Lirdoner
post
Post #204





Grupa: Zarejestrowani
Postów: 500
Pomógł: 1
Dołączył: 29.09.2009

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


Witam, chciałbym aby jeżeli tekst odnośnika do strony jest dłuższy niż 100 znaków to pojawiały się tylko 20 pierwszych znaków, następnie ... i końcowe 20 znaków.
Jak to zmienić w parserze?
Go to the top of the page
+Quote Post
wookieb
post
Post #205





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




https://github.com/wookieb/bbcode/blob/mast...Filters/Url.php
Metoda shortUrl
Go to the top of the page
+Quote Post
benzulli
post
Post #206





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 3.07.2013

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


Witam,

Jak mogę to umieścić na swojej stronie? Chciałbym tak zrobić, żeby można było bbcode używać przy dodawaniu newsa, już cały skrypt gotowy, tylko jak to tam wsadzić?
Go to the top of the page
+Quote Post
wookieb
post
Post #207





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Musisz zastosować parser bbcode przy zapisie aby zastąpić oryginalną treść newsa treścią z parsera. Przykład jak wykorzystać parser jest podany na 1 stronie tematu oraz w repozytorium.
Go to the top of the page
+Quote Post
benzulli
post
Post #208





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 3.07.2013

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


  1. <form action="" method="post">
  2. <select name="id_profesji">
  3. <?php
  4. include("polacz.php");
  5. $results = mysql_query("SELECT id, profesja FROM profesje");
  6. while($id_profesji = mysql_fetch_array($results))
  7. {
  8. ?>
  9. <option value="<?php echo $id_profesji[0]; ?>">
  10. <?php echo $id_profesji[1]; ?>
  11. </option>
  12. <?php
  13. }
  14. ?>
  15. </select><br />
  16. Tytuł<br />
  17. <input type="text" name="tytul" /><br />
  18. Level:<br />
  19. <input type="text" name="level" /><br />
  20. Wersja:<br />
  21. <input type="text" name="version" /><br />
  22. Ostatnia aktualizacja: <br />
  23. <input type="text" name="last_update" /><br />
  24. Video: <br />
  25. <input type="text" name="video" /><br />
  26. Treść: <br />
  27. <textarea name="tresc"></textarea>
  28. <input type="submit" value="Dodaj" />
  29. </form>
  30. <?php
  31. $tytul = $_POST['tytul'];
  32. $level = $_POST['level'];
  33. $version = $_POST['version'];
  34. $last_update = $_POST['last_update'];
  35. $video = $_POST['video'];
  36. $id_profesji = (int)$_POST['id_profesji'];
  37. $tresc = $_POST['tresc'];
  38. if($_SERVER['REQUEST_METHOD'] == 'POST')
  39. {
  40. $query = mysql_query("INSERT INTO skrypty SET tytul='$tytul', level='$level', version='$version', last_update='$last_update', video='$video', id_profesji='$id_profesji', tresc='$tresc'");
  41. if($query) echo "Poradnik został dodany poprawnie";
  42. else echo "Błąd, nie udało się dodać nowego poradnika";
  43. }
  44. ?>


Mam taki kod, on jest odpowiedzialny za dodanie nowego newsa. Pytam bo nie wiem, czytam już trzeci raz i nie wiem co i jak do czego. Mam po prostu zaincludować na samą górę plik bbcode.php?
Go to the top of the page
+Quote Post
wookieb
post
Post #209





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Najpierw naucz się programować. Koniec dyskusji.
Go to the top of the page
+Quote Post
benzulli
post
Post #210





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 3.07.2013

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


Witam, poradziłem sobie z tym już jakiś czas temu, lecz teraz tak naprawdę zacząłem używać tabeli. Firebug w ogóle nic nie wykazuje, usunąłem cały styl pliku i nadal występuje błąd: nad tabelą pozostaje jakies 500-600px wolnego miejsca. Próbowałem to zmienić margin-top:-500px, ale jest to rozwiązanie niestabilne, bo czasami tabela rozszerza się na większą odległość.

Dodałem to do basic.php

  1. 'table' => array(
  2. 'open' => 'table',
  3. 'close' => 'table',
  4. 'notallowed_child' => array('table')
  5. ),
  6. 'tr' => array(
  7. 'open' => 'tr',
  8. 'close' => 'tr',
  9. 'notallowed_child' => array('tr')
  10. ),
  11. 'td' => array(
  12. 'open' => 'td',
  13. 'close' => 'td',
  14. 'notallowed_child' => array('td')
  15. ),


A taką formę ma mój kod html, który jest potem parsowany:

  1. [table]
  2. [tr]
  3. [td]asdasdas[/td]
  4. [td]adadasdas[/td]
  5. [td]asdasteretrr34[/td]
  6. [/tr]
  7. [tr]
  8. [td]3333[/td]
  9. [td]sawe[/td]
  10. [td]asaa[/td]
  11. [/tr]
  12. [/table]
  13.  


Kiedy dodam tabelkę bez zdjęć odstęp od góry też występuje.

Ten post edytował benzulli 15.02.2014, 21:37:35
Go to the top of the page
+Quote Post
com
post
Post #211





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


pokaż to na przykładzie, bo wrzuciłeś jakieś fragmenty które niczego nie obrazują.. najlepiej link albo jsfiddle
Go to the top of the page
+Quote Post
benzulli
post
Post #212





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 3.07.2013

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


  1. blablablablabla 1231231313123123123 test
  2. <?php
  3. require_once 'Bbcode/BbCode.php';
  4. $tresc = '[table]
  5. [tr]
  6. [td]asdasdas[/td]
  7. [td]adadasdas[/td]
  8. [td]asdasteretrr34[/td]
  9. [/tr]
  10. [tr]
  11. [td]3333[/td]
  12. [td]sawe[/td]
  13. [td]asaa[/td]
  14. [/tr]
  15. [/table]';
  16. $parser = new BbCode();
  17. echo $parser->parse($tresc); ?>
  18. blablablablabla 1231231313123123123 test


http://renzulli.linuxpl.info/images/parser.php

Tutaj akurat nie ma zbytnio dużego odstępu, jedynie 230px, ale jeśli dam więcej kodu to wtedy występują większe odstępy - nie mam pojęcia dlaczego.

Ten post edytował benzulli 15.02.2014, 21:59:36
Go to the top of the page
+Quote Post
com
post
Post #213





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


Źródło prawdę Ci powie, nwm co to za parser ale coś w nim jest nie tak (IMG:style_emoticons/default/wink.gif)
  1. blablablablabla 1231231313123123123 test
  2. <table><br />
  3. <tr><br />
  4. <td>asdasdas</td><br />
  5. <td>adadasdas</td><br />
  6. <td>asdasteretrr34</td><br />
  7. </tr><br />
  8. <tr><br />
  9. <td>3333</td><br />
  10. <td>sawe</td><br />
  11. <td>asaa</td><br />
  12. </tr><br />
  13. </table>blablablablabla 1231231313123123123 test
Go to the top of the page
+Quote Post
benzulli
post
Post #214





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 3.07.2013

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


Wiem co jest nie tak - po prostu każde przeniesienie do nowej linijki to <br />. Zatem będę musiał tabelki pisać bez przeniesień do nowych linijek.
Go to the top of the page
+Quote Post
com
post
Post #215





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


tak ale wgl poco Ci to br tu? przecież jego to się rzadko w obecnych czasach używa do łamana tekstu, akapity wyznaczasz znacznikiem <p>, a br to ostateczność..
Go to the top of the page
+Quote Post
benzulli
post
Post #216





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 3.07.2013

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


Właśnie go nie chcę, a to jest w parserze ustawione, że po złamaniu linii w bbcode dodaje <br>. Ja dodałem bbcode tabeli ręcznie. Chciałbym się tego pozbyć.
Go to the top of the page
+Quote Post
com
post
Post #217





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


no to warunkiem sprawdzaj czy jesteś w tabeli jeśli tak no to nie dodajesz br jeśli nie no to tak jak było (IMG:style_emoticons/default/wink.gif)

albo stwórz oddzielna metodę do generowana tabelek najlepiej (IMG:style_emoticons/default/wink.gif)

Ten post edytował com 16.02.2014, 01:00:27
Go to the top of the page
+Quote Post
benzulli
post
Post #218





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 3.07.2013

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


Dzięki, po prostu zastosuję preg_replace do tych 6 znaków i po problemie.

@edit
Niestety, po zastosowaniu preg_replace dalej występuje ten błąd. Wgrywałem inne parsery, ale część nie ma tabelek, a w innych to same błędy wyskakują.

Ten post edytował benzulli 16.02.2014, 10:54:29
Go to the top of the page
+Quote Post
pionas
post
Post #219





Grupa: Zarejestrowani
Postów: 70
Pomógł: 2
Dołączył: 25.03.2009
Skąd: Pionki

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


I ja podepnę się do tematu..

ckeditor z wtyczką bbcode tworzy list na takiej zasadzie:
[_list=1]
[_*]Aaaaaaaa
[_*]Bbbbbbbb
[_*]Ccccccccc
[_/list]
(jeśli ma być numerowane)

lub wypunktowanie
[_list]
[_*]Aaaaaaaa
[_*]Bbbbbbbb
[_*]Ccccccccc
[_/list]
jak to dostosować do dodatku List.php?

Dodałem _ bo tutaj działa takie parsowanie...
Go to the top of the page
+Quote Post
sazian
post
Post #220





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


kiedyś przerabiałem ten problem z listami
może komuś się przyda https://www.dropbox.com/s/n9ti8d57mgr0ly3/plugin.js?dl=1 teraz ck będzie zamykał tagi w listach, nie pamiętam co tam zmieniałem żeby działało więc musicie szukać sami (IMG:style_emoticons/default/smile.gif)
wydaje mi się chodzi o to
Kod
this.setRules('*', {
                        breakBeforeOpen: 1,
                        breakAfterOpen: 0,
                        breakBeforeClose: 0,
                        breakAfterClose: 1
                    });

ale pewności nie mam
Go to the top of the page
+Quote Post

12 Stron V  « < 9 10 11 12 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 14:47