Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

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





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

Posty w temacie
- wookieb   [klasa] Zaawansowany parser bbcode (php5)   2.03.2009, 14:10:58
- - wookieb   Problem poprawiony i nowa paczka jest na serwerze....   16.05.2010, 22:34:46
- - redelek   Witam, Ostatnio kolega @wookieb podał mi kod do s...   25.05.2010, 10:31:34
- - wookieb   Było http://forum.php.pl/index.php?act=findpost.....   25.05.2010, 10:40:23
- - redelek   oki tego nie widziałem Ale jak zrobiłem zmiany z ...   25.05.2010, 11:12:51
- - wookieb   A no tak bo zmienił się parser [PHP] pobierz, plai...   25.05.2010, 11:30:07
- - redelek   Poprawiłem i teraz mi wyświetla Fatal error: Call ...   25.05.2010, 13:24:25
- - wookieb   To w takim razie sprawdź jaka funkcja przeparsuje ...   25.05.2010, 13:28:04
- - redelek   Witam, Już doszedłem prawie gdzie był problem. W ...   26.05.2010, 09:27:14
- - wookieb   A gdzie ty masz tag "code" uzyty? Poza t...   26.05.2010, 09:44:55
- - redelek   to forum wycieło znaczniki code. Kurcze no mam te ...   26.05.2010, 10:06:39
- - wookieb   Przecież cały czas mówię o dodaniu atrybutu LANG d...   26.05.2010, 10:17:00
- - redelek   Dodałem atrybut [PHP] pobierz, plaintext public $...   26.05.2010, 11:26:51
- - wookieb   Przeczytaj jeszcze raz moje posty. napisałem: DODA...   26.05.2010, 11:29:47
- - redelek   A może mi Pan pomóc, Kurcze nie jestem taki mocy ...   26.05.2010, 12:32:28
- - GyniO   Mam jeszcze tylko 1 pytanie, w którym miejscu mogę...   23.06.2010, 13:44:34
- - Crozin   Masz, pokalało Cię za używanie twardych spacji do ...   23.06.2010, 13:59:24
- - GyniO   Ok działa Parser zamienia \t na 4x nbsp w ...   23.06.2010, 14:10:04
- - athabus   Właśnie szukałem czegoś do parsowania bbcodu z moż...   2.07.2010, 13:32:07
- - wookieb   Cytat(athabus @ 2.07.2010, 14:32:07 )...   3.07.2010, 07:28:30
- - Zajec   Potrzebuję wymienić parser BBCode i cieszę się że ...   3.03.2011, 22:08:21
- - wookieb   Wystarczy dodać katalog z BbCode do include_path   3.03.2011, 22:11:02
|- - Zajec   Cytat(wookieb @ 3.03.2011, 22:11:02 )...   8.03.2011, 12:57:04
- - gorzat   witam, sciagnalem sobie to, ale nie bardzo wiem ja...   22.03.2011, 18:33:41
- - Avatarus   a jak zrobić zwykłe prasowanie Kod<br /> W...   3.04.2011, 13:19:02
- - wookieb   Musisz wcześniej zamienić "<br />...   3.04.2011, 13:37:46
- - mlawnik   A czy jest możliwość parsowania youtube po samym I...   7.04.2011, 16:21:07
- - wookieb   Tak. W tagu podajesz po prostu tylko jego ID   7.04.2011, 17:57:57
- - mlawnik   No ale jak podaje samo id to mi sie wyswietla ramk...   10.04.2011, 16:44:28
- - wookieb   Jestem kretynem. Mój błąd W pliku Filter/Youtube.p...   10.04.2011, 16:51:43
- - mlawnik   Poprawione. Zaraz dorzuce twoje przyklady i zrobi...   10.04.2011, 17:20:41
- - wookieb   Raczej nie forka. I tak będę wydawał nową wersję.   10.04.2011, 17:21:39
- - mlawnik   Czekam z nieciepliwością. EDIT: Dla potomnych: Z...   10.04.2011, 18:00:19
- - nekomata   Jedna rzecz , czy parser blokuję html'a i XSS ...   11.04.2011, 16:45:04
- - wookieb   Sam blokuje.   11.04.2011, 17:01:35
- - nekomata   Dzięki , zaoszczędzi mi to trochę włosów na głowie...   11.04.2011, 17:12:04
- - wookieb   Nie planuje, bo jest to zbyt zależne od widoku.   12.04.2011, 21:10:03
- - nekomata   W sumie dzięki takiemu łatwemu do zrozumienia rozp...   13.04.2011, 18:41:55
- - szczeku   Cześć, Na początek napisze, że świetny parser stw...   15.04.2011, 13:02:09
- - nekomata   @mlawnik popraw tag youtube'a dokładnie mam na...   16.04.2011, 00:26:33
- - wookieb   1) Tak zajmę się tym 2) Niestety raczej nie ma tak...   16.04.2011, 10:53:43
- - mlawnik   @nekomata, poprawione.   17.04.2011, 16:00:19
- - evolucja   Jak korzystać z tej zajawki? Mam w pętli wyświetla...   8.05.2011, 18:12:43
- - wookieb   A na jakiej podstawie mogę stwierdzić co jest źle ...   8.05.2011, 18:17:02
- - evolucja   No spróbuj sobie do tego $news['content...   8.05.2011, 18:22:29
- - wookieb   Zbadaj tekst za pomocą var_dump i sprawdź czy nie ...   8.05.2011, 18:24:50
- - evolucja   1. Wychodzi string(397) podczas gdy tekst wklejony...   9.05.2011, 16:38:09
- - wookieb   Cytat(evolucja @ 9.05.2011, 17:38:09 ...   9.05.2011, 17:28:13
- - evolucja   Łap paczkę z przykładem. Coś z kodowaniem nawet je...   9.05.2011, 19:05:17
- - wookieb   Ok poprawione. Dzięki za znalezienie błędu   9.05.2011, 19:40:31
- - mlawnik   Można prosić o numery linijek i typy zmian? Staram...   9.05.2011, 20:11:48
- - wookieb   Jasne. Linia 1357 bbcode.class.php [PHP] pobierz, ...   9.05.2011, 20:17:05
- - mlawnik   Poprawiłem i przypominam, że repo z kilkoma nowymi...   9.05.2011, 20:21:54
- - evolucja   Cytat(wookieb @ 9.05.2011, 20:40:31 )...   10.05.2011, 13:24:25
- - mlawnik   Poprawki są od strony 6, nie wiem, ale chyba wooki...   10.05.2011, 15:02:30
- - wookieb   Tak wrzuciłem Twoje poprawki mlawnik Projekt jest ...   10.05.2011, 21:20:37
- - mlawnik   Katalogi z SVN-a ci się skopiowały. Przydałby się...   20.06.2011, 20:43:27
- - wookieb   Hmm u mnie wszystko śmiga elegancko bez żadnych pr...   20.06.2011, 21:22:38
- - mlawnik   U autora zawsze śmiga live demo: yopqsdev.orche...   20.06.2011, 21:24:24
- - wookieb   Miałeś starą wersję parsera. Zassaj nową. Wrzuciłe...   20.06.2011, 22:18:37
- - mlawnik   Faktycznie, trochę lepiej. Zobaczę kodowanie, i da...   21.06.2011, 18:52:17
- - wookieb   Narazie nie za bardzo. To repo całego projektu (cz...   22.06.2011, 14:26:03
- - mlawnik   A gałąź z kodem (praca na niej) i merge z masterem...   22.06.2011, 16:30:36
- - wookieb   A merge usunąłby pliki usunięte w branchu z kodem.   22.06.2011, 16:41:39
- - mlawnik   Szukałem, szukałem i... znalazłem: http://stack...   22.06.2011, 19:42:07
- - evolucja   Zgłosiłem błąd na githubie   19.08.2011, 13:09:43
- - master_25   Witam, takie pytanie: Czy jest w miarę prosta możl...   14.09.2011, 17:38:47
- - Tanner963   Co muszę zrobić, aby nie zamykało automatycznie ni...   17.09.2011, 20:13:03
- - wookieb   Niedomykanie a poprawa kolejności to 2 różne rzecz...   17.09.2011, 20:55:22
- - Tanner963   Mam kolejny problem - wstawiłem BBCode'a od ko...   24.09.2011, 17:40:19
- - wookieb   A dokłądniej? Przykład?   24.09.2011, 18:34:16
- - Tanner963   Sory, nie sprecyzowałem.. Poprawka: Parsuje tag ko...   24.09.2011, 18:59:15
- - favik   Witam, ogólnie klasa super, mam jednak mały mankam...   27.03.2012, 13:50:29
- - wookieb   Masz rację - to mów wielki błąd. Przepraszam barzd...   27.03.2012, 20:30:46
- - xxdrago   A ja się chciałem zapytać bo już się bawię kilka m...   30.03.2012, 19:28:42
- - wookieb   Wszystko co nie jest sparsowane bezpośrednio przez...   31.03.2012, 21:49:05
- - xxdrago   Ok, teraz mi się podoba, jak wyłączyć htmlspecialc...   3.04.2012, 20:15:13
- - wookieb   [PHP] pobierz, plaintext $node['nobr'] = t...   3.04.2012, 20:22:24
- - xxdrago   Super dziękuje, teraz mam taki problem nie wiem cz...   3.04.2012, 22:03:26
- - KG-   Bardzo fajny skrypt, ale znalazłem jednego niewiel...   24.04.2012, 13:28:03
- - deluks1980   Więcej komplikacji z ustawieniem czegoś jakiegoś i...   10.05.2012, 14:14:26
- - wookieb   [PHP] pobierz, plaintext 'size' => array( ...   10.05.2012, 18:24:17
- - deluks1980   Dzięki wielkie, ułożyłem coś podobnego według manu...   16.05.2012, 08:33:31
- - Lirdoner   Odkopię trochę temat bo mam mały problem. Jak zrob...   5.08.2012, 12:02:34
- - wookieb   Aktualnie jest tak jeżeli zrobisz coś takiego Kod...   5.08.2012, 16:49:43
- - corey1991   Witam, miałem okazję wykorzystać klasę i muszę pow...   9.09.2012, 12:11:07
- - wookieb   Rozwiązanie jest OK. Wartość parametru jest genero...   9.09.2012, 19:32:26
- - Zaszczyk   Chcę otrzymać zajawkę tekstu i używam takiego kodu...   24.09.2012, 22:03:01
- - wookieb   Nie ma takiej możliwości. Pobierz wersję HTML i us...   24.09.2012, 22:10:05
- - Zajec   [PHP] pobierz, plaintext public function parseQuot...   3.11.2012, 11:42:21
- - wookieb   @Zajec - bardzo dziękuję za wykrycie buga - błąd z...   3.11.2012, 18:39:39
- - Zajec   Dzięki serdeczne! Widzę też, że przesiadłeś si...   3.11.2012, 19:00:33
- - wookieb   Sztywne użycie php.net w checkUrl jest trochę... j...   3.11.2012, 19:13:23
- - Zaszczyk   Zastosowałem tą klasę na swoim małym forum żeby, d...   8.11.2012, 18:41:12
- - wookieb   Podaj proszę dokładną zawartość zmiennej $_PO...   8.11.2012, 18:55:05
- - Zaszczyk   [PHP] pobierz, plaintext [qote]trolololo...   8.11.2012, 19:27:24
- - wookieb   Tag zamykający quote był (jak domniemam) nieprawid...   8.11.2012, 20:04:25
- - Zaszczyk   Mam problem z klasą, jak dodaje rekord do bazy to ...   12.12.2012, 16:54:45
- - wookieb   To domyślne zachowanie które zabezpiecza przed tym...   12.12.2012, 17:19:47
- - pionas   Cześć, bardzo fajna klasa, niestety jednak dzisia...   17.02.2013, 10:05:47
- - wookieb   Ściągasz wersję bezpośrednio z githuba? Po uruchom...   17.02.2013, 10:28:54
3 Stron V  < 1 2 3 >


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: 7.10.2025 - 08:47