![]() |
![]() |
![]()
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
Ustawienie kontroluje stopień sprawdzenia danych. Gdy kod bbcode sparsowaliśmy wcześniej to pobieramy jest wersję zaufaną i zapisujemy.
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 ![]() 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
-------------------- |
|
|
![]() |
![]()
Post
#101
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Problem poprawiony i nowa paczka jest na serwerze. Plik BbCode.class.php do zmiany
-------------------- |
|
|
![]()
Post
#102
|
|
![]() Grupa: Zarejestrowani Postów: 658 Pomógł: 37 Dołączył: 4.06.2005 Skąd: Wawa Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Ostatnio kolega @wookieb podał mi kod do swojej klasy bbcode. Wszystko działa prawie super ![]() Zrobiłem to tak a tu go zamykam*/ '; echo '<fieldset class="pre"><legend>Oryginalny tekst</legend>'.$text.'</fieldset>'; $bb->parse($text, false); echo '<fieldset><legend>Po BBC</legend'.$bb->getHtml().'</fieldset>'; ?>[/php] Znalazłem w klasie code.php odblokowanie funkcji GESHI. Niestety pomimo usilnych starań nie koloruje mi składni ![]() Czy może ktoś mi pomoc ? Dzięki Ten post edytował redelek 25.05.2010, 10:33:54 -------------------- Pozdrawiam
Piotrek R |
|
|
![]()
Post
#103
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Było
http://forum.php.pl/index.php?act=findpost...&pid=684713 // EDIT: Dziękuję za połączenie tematów ![]() Ten post edytował wookieb 25.05.2010, 11:34:43 -------------------- |
|
|
![]()
Post
#104
|
|
![]() Grupa: Zarejestrowani Postów: 658 Pomógł: 37 Dołączył: 4.06.2005 Skąd: Wawa Ostrzeżenie: (0%) ![]() ![]() |
oki tego nie widziałem
Ale jak zrobiłem zmiany z code.php
To wywala mi taki błąd Catchable fatal error: Object of class BbCodeSettings could not be converted to string in D:\www\TESTY-MODULOW\geshi_testy\geshi\geshi.php on line 667 Przepraszam, ale czarna magia dla mnie. Chodzi mi o to że jak w tekscie znajdzie [code lanh='php'] [/code] to pokoloruje to. -------------------- Pozdrawiam
Piotrek R |
|
|
![]()
Post
#105
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
A no tak bo zmienił się parser
Oraz
Powinno być ok Jeżeli chcesz obsłużyć parametr lang to czytaj readme no i przejrzyj w funkcji zawartość zmiennej $openNode Żebyś wiedział, skąd wyciągnać wartość atrybutu -------------------- |
|
|
![]()
Post
#106
|
|
![]() Grupa: Zarejestrowani Postów: 658 Pomógł: 37 Dołączył: 4.06.2005 Skąd: Wawa Ostrzeżenie: (0%) ![]() ![]() |
Poprawiłem i teraz mi wyświetla
Fatal error: Call to undefined method GeSHi::parseCode() in D:\www\TESTY-MODULOW\geshi_testy\Bbcode\Filters\Code.php on line 94 a ta linijka to
-------------------- Pozdrawiam
Piotrek R |
|
|
![]()
Post
#107
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
To w takim razie sprawdź jaka funkcja przeparsuje code w geshi, bo juz nie pamietam, może miałem inna wersje. Ale generalnie wiesz o co chodzi.
-------------------- |
|
|
![]()
Post
#108
|
|
![]() Grupa: Zarejestrowani Postów: 658 Pomógł: 37 Dołączył: 4.06.2005 Skąd: Wawa Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Już doszedłem prawie gdzie był problem. W Geshi zostało zmienione parseCode() na parse_code() i już działa to znaczy nie wyświetla błędu. Niestety kod nie jest pokolorowany jest wyświetlony jako default Code.php
i zniknieła zmienna użyta w przykładowym skrypcie php
Mogę prosić o pomoc lub naprowadzenie ? -------------------- Pozdrawiam
Piotrek R |
|
|
![]()
Post
#109
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
A gdzie ty masz tag "code" uzyty?
Poza tym pisałem, przeczytaj readme.html jak się dodaje parametry do tagów -------------------- |
|
|
![]()
Post
#110
|
|
![]() Grupa: Zarejestrowani Postów: 658 Pomógł: 37 Dołączył: 4.06.2005 Skąd: Wawa Ostrzeżenie: (0%) ![]() ![]() |
to forum wycieło znaczniki code.
Kurcze no mam te tagi dopisane
-------------------- Pozdrawiam
Piotrek R |
|
|
![]()
Post
#111
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Przecież cały czas mówię o dodaniu atrybutu LANG do tagu CODE.
-------------------- |
|
|
![]()
Post
#112
|
|
![]() Grupa: Zarejestrowani Postów: 658 Pomógł: 37 Dołączył: 4.06.2005 Skąd: Wawa Ostrzeżenie: (0%) ![]() ![]() |
Dodałem atrybut
i ndal nie koloruje ![]() w kodzie mam [code lang="php"] Ten post edytował redelek 26.05.2010, 11:27:19 -------------------- Pozdrawiam
Piotrek R |
|
|
![]()
Post
#113
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Przeczytaj jeszcze raz moje posty.
napisałem: DODAJ ATRYBUT + SPRAWDŹ W KODZIE JAK TEN ATRYBUT PRZEKAZAĆ DO GESHI -------------------- |
|
|
![]()
Post
#114
|
|
![]() Grupa: Zarejestrowani Postów: 658 Pomógł: 37 Dołączył: 4.06.2005 Skąd: Wawa Ostrzeżenie: (0%) ![]() ![]() |
A może mi Pan pomóc,
Kurcze nie jestem taki mocy w PHP i ślęczę nad tym od dwóch dni i nic ciekawego wymodzić nie mogę. Tak kiepski jestem wiem. Amatorsko się tym zajmuję na potrzeby zabawy i wolnego czasu. Proszę o wyrozumiałość, potrzebne mi jest to do moich skryptów z języka bash Ten post edytował redelek 26.05.2010, 12:33:16 -------------------- Pozdrawiam
Piotrek R |
|
|
![]()
Post
#115
|
|
Grupa: Zarejestrowani Postów: 53 Pomógł: 3 Dołączył: 8.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Mam jeszcze tylko 1 pytanie, w którym miejscu mogę zrobić parsowanie emotów? tzn ": )" na
![]() --------------------------------------------------------------------------------------------------------------- Ok, udało mi się podłączyć Geshi do Tego parsera, nie miałem żadnych większych problemów ;] Ale mam pewien problem z wyświetlaniem tego, mianowicie na chrome wszystko działa: http://gynio.pl/artykul/8-geshi-dodatek-do-parsera-BBcode/ A na Mozilli wywala błąd XML
Problem tkwi w
Strona to mój "cms" z OPT. Ten post edytował GyniO 23.06.2010, 13:58:17 |
|
|
![]()
Post
#116
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Masz, pokalało Cię za używanie twardych spacji do czegoś do czego nie zostały stworzone.
Ale żeby nie było: http://changelog.ca/log/2006/06/12/making_...ml_rss_and_atom |
|
|
![]()
Post
#117
|
|
Grupa: Zarejestrowani Postów: 53 Pomógł: 3 Dołączył: 8.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Ok działa
![]() Parser zamienia \t na 4x nbsp w pliku bbcode.class.php Ten post edytował GyniO 23.06.2010, 14:55:29 |
|
|
![]()
Post
#118
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Właśnie szukałem czegoś do parsowania bbcodu z możliwością dodania kilku niestandardowych znaczników i natrafiłem na Twoją fajną klasę. Na prawdę niezła robota. Z moich uwag to:
- nie wiem, czy dobrze widzę, ale czy niestandardowe tagi trzeba dopisać "na stałe" do klasy? Jeśli tak to fajnie byłoby dodać jakąś metodę pozwalającą na zmianę w locie - raz mogę potrzebować innego zestawu tagów a drugi raz innego. Fajnie aby takie rzeczy można było zmieniać w kodzie. - zadeklarowałbym metody jak protected a nie private tak, aby w razie czego można było dziedziczyć po Twojej klasie - znów powód jak powyżej - czasami mogę potrzebować jakiś niestandardowych rozwiązań i zamiast przerabiać całą klasę mógłbym tylko dodać/zmienić pewne części Najbardziej podoba mi się automatyczne "domykanie" tagów - wiele rozwiązań nie ma tego zaimplementowanego a jest to przydatna funkcja. Ogólnie dobra robota - gratuluje. |
|
|
![]()
Post
#119
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
- nie wiem, czy dobrze widzę, ale czy niestandardowe tagi trzeba dopisać "na stałe" do klasy? Jeśli tak to fajnie byłoby dodać jakąś metodę pozwalającą na zmianę w locie - raz mogę potrzebować innego zestawu tagów a drugi raz innego. Fajnie aby takie rzeczy można było zmieniać w kodzie. To faktycznie mój błąd, że nie zadbałem o możliwośc stworzenia dynamicznych filtrów aczkolwiek klasa jest przygotowana pod szereg przeróżnych kombinacji filtrów, możliwość włączenie wyłączenia poszczególnych tagów (BbCodeSettings) - zadeklarowałbym metody jak protected a nie private tak, aby w razie czego można było dziedziczyć po Twojej klasie - znów powód jak powyżej - czasami mogę potrzebować jakiś niestandardowych rozwiązań i zamiast przerabiać całą klasę mógłbym tylko dodać/zmienić pewne części Metod prywatnych używa się kiedy chcemy aby użytkownik nie mógł ich nadpisać i bezpośrednio używać z tego m.in względu aby nie zepsuł działania pewnego elementu. Tak więc uznałem, że większość metody parsujące powinny być prywatne, aczkolwiek faktycznie ładowanie filtrów może być chronione i zależne od użytkownika. Jak będę prowadził pracę nad modyfikacjami na pewno to zrobię ![]() -------------------- |
|
|
![]()
Post
#120
|
|
![]() Grupa: Zarejestrowani Postów: 1 086 Pomógł: 8 Dołączył: 10.12.2003 Ostrzeżenie: (0%) ![]() ![]() |
Potrzebuję wymienić parser BBCode i cieszę się że znalazłem coś porządnego
![]() Niestety pierwsza próba odpalenia sprawiła kilka kłopotów, otóż postanowiłem wrzucić klasę do odpowiedniego podkatalogu mojego systemu. Wtedy okazało się, że robiąc "require_once 'include/tools/parsers/BbCode.php" wszystko się sypie, ze względu na relatywność ścieżek. Poprawiłem to prostym znanym trickiem z dirname i __FILE__. Dzielę się swoim patchem, fajnie gdybyś go włączy do swojego "mainline" ![]() http://files.zajec.net/bbcode.0001.patch.txt |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 11:16 |