Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [klasa] Zaawansowany parser bbcode (php5), advanced bbcode parser
wookieb
post 2.03.2009, 14:10:58
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 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
- - .radex   No nie wiem, czy zapis do bazy jest szybszy od spr...   2.03.2009, 19:05:57
- - wookieb   Cytat(.radex @ 2.03.2009, 19:05:57 ) ...   2.03.2009, 19:14:15
- - WebKing   Cytat(wookieb @ 2.03.2009, 14:10:58 )...   9.03.2009, 18:28:58
|- - pyro   Cytat(WebKing @ 9.03.2009, 18:28:58 )...   9.03.2009, 18:49:06
|- - bim2   Cytat(WebKing @ 9.03.2009, 18:28:58 )...   10.03.2009, 18:35:29
- - gebp   Klasa działa fajnie. Jefnak z danego tutka nie jes...   11.03.2009, 21:33:51
- - wookieb   I to był właśnie mój błąd...   11.03.2009, 23:01:22
- - gebp   Dięki ~wookieb. Z kolorem od razu pomogło. Ja jed...   12.03.2009, 12:01:24
- - wookieb   Cytat(gebp @ 12.03.2009, 12:01:24 ) J...   12.03.2009, 12:03:07
- - zegarek84   aż z ciekawości jak wrócę ze studiów po weekendzie...   12.03.2009, 12:21:00
- - normanos   Bardzo ciekawa klasa, gratulacje. Wiem co mówię bo...   12.03.2009, 19:16:52
- - SHiP   Ok sprawdziłem i dwie uwagi 1. jeśli umieścimy c...   17.03.2009, 17:44:53
- - wookieb   Klasa została poprawiona i usprawniona. Dodałem ws...   14.05.2009, 08:49:51
- - slewin   a ja pobrałem klasę ,wypakowałem ją do katalogu na...   14.05.2009, 13:38:36
- - wookieb   Zapewne masz php4 zamiast php5   14.05.2009, 13:43:08
- - slewin   na jednym mam PHP Version 5.0.4 a na tym gdzie pas...   14.05.2009, 13:47:14
- - wookieb   CytatPHP 5 introduces Type Hinting. Functions are ...   14.05.2009, 13:50:47
- - slewin   testuje paser od jakiegoś czasu i przyzna,m ...   28.05.2009, 13:48:38
- - wookieb   Przykładowy filtr youtube.php [PHP] pobierz, ...   28.05.2009, 14:09:51
- - slewin   dzięki , już łapie o co chodzi . Będę się musia...   28.05.2009, 15:11:32
- - wookieb   Wiec ten kod wstawiasz w miejsce Kod tutaj wpisuje...   28.05.2009, 15:12:43
- - slewin   Tak zrobiłem wcześniej ,ale nie było widać odtwarz...   28.05.2009, 15:37:29
- - wookieb   Zacznijmy od tego, że raczej coś źle zrobiłeś bo m...   28.05.2009, 18:40:55
- - Fixer   może się przyda:) http://hobix.com/textile/quick.h...   30.05.2009, 12:41:38
- - Fafu   Witam! http://wookieb.pl/bbcode/cut_test.php -...   23.06.2009, 23:21:59
- - wookieb   Oczywiście masz rację. Poprawiłem c...   24.06.2009, 09:20:51
- - Fafu   Dzięki za odpowiedź, czy żeby u mnie działało wyci...   24.06.2009, 12:00:29
- - wookieb   Tak aktualizowałem, pobierz nową paczkę   24.06.2009, 12:04:21
- - Fafu   No niestety nadal coś nie działa... wyświetla się:...   24.06.2009, 12:13:31
- - wookieb   Sprawdź czy aby napewno poprawnie ściągnąłeś nowe ...   24.06.2009, 12:27:49
- - Fafu   No niestety, ściągałem kilka razy i...   24.06.2009, 12:37:06
- - slewin   a ja mam mały problem bo nie wiem jak stosować zna...   27.06.2009, 11:09:49
- - wookieb   Nawet nie wiesz co to bbcode :/ http://bbcode.org/...   27.06.2009, 12:40:44
- - mowgli91   Kurczę, nie mogę ogarnąć jednej rzeczy - chciałbym...   8.07.2009, 16:03:37
- - MajareQ   Ja mam pytanko z całkiem innej sceny. Jaka jest li...   22.09.2009, 16:24:20
- - wookieb   Do własnego jak i komercyjnego użytku. Nie znam si...   22.09.2009, 17:19:50
|- - MajareQ   Cytat(wookieb @ 22.09.2009, 18:19:50 ...   23.09.2009, 09:38:23
- - lysiu   U mnie śmiga, że hej! Narazie poprawiłem jede...   23.09.2009, 00:10:14
- - wookieb   Tak   23.09.2009, 09:39:59
- - lysiu   no i na przykład do img nie dodajesz alt i nie zam...   23.09.2009, 10:34:20
- - wookieb   Cytat(lysiu @ 23.09.2009, 01:10:14 ) ...   1.10.2009, 09:34:26
- - Spawnm   UPDATE PARSERA. Wszystkie nowinki w pierwszym pośc...   2.10.2009, 10:19:08
- - c3zi   Wszystko fajnie wygląda. Brakuje tylko integracji ...   8.10.2009, 11:49:17
- - wookieb   A co za problem zintegrować to samemu? A dlaczego ...   8.10.2009, 11:58:03
- - c3zi   Swift jest zintegrowany w kohana. Z tą integracją...   8.10.2009, 20:08:38
- - wookieb   Pokaż jak zaimplementowałeś geshi.   8.10.2009, 20:14:07
- - c3zi   Mam dwa pytania. 1. Jest jakaś opcja dostarczenia ...   22.10.2009, 13:46:49
- - wookieb   1) A readme.html czytał? 2) Opcje leave_* opisane ...   22.10.2009, 20:24:30
- - karol98   przyda się użyję w swoim skrypcie   23.10.2009, 18:03:13
- - c3zi   Jeszcze jedno pytanie. Da się zrobić odwrotną konw...   24.10.2009, 20:11:21
- - wookieb   Tak da się tworząc filtry odwrotne. Aczkolwiek tak...   24.10.2009, 23:40:21
- - Zdunek   nie wiem czy to tylko u mnie, czy znalazłem buga j...   26.10.2009, 12:28:53
- - wookieb   @Zdunek Poprawiłem błąd, Dzięki za info   27.10.2009, 21:53:43
|- - Zdunek   Cytat(wookieb @ 27.10.2009, 22:53:43 ...   29.10.2009, 23:12:26
- - wookieb   Linia 1233   29.10.2009, 23:17:35
|- - Zdunek   Cytat(wookieb @ 29.10.2009, 23:17:35 ...   5.11.2009, 21:50:44
- - wookieb   Wielkie dzięki Przyznam, że wyrażenie skądś kopio...   5.11.2009, 23:21:38
|- - Zdunek   Cytat(wookieb @ 5.11.2009, 23:21:38 )...   7.11.2009, 14:51:37
- - wookieb   Przetestowałem link i jest ok. Proszę upewnij się ...   7.11.2009, 15:05:56
|- - Zdunek   Cytat(wookieb @ 7.11.2009, 15:05:56 )...   7.11.2009, 15:13:36
- - wookieb   Pomysł ciekawy. Dlatego dodałem do tagów opcję hid...   8.11.2009, 15:44:10
- - Zdunek   mam pytanko, w jaki sposób podczepić GeSHi ? znal...   24.11.2009, 17:42:05
- - wookieb   Jest to zabezpieczenie przed tym aby czasem autor ...   24.11.2009, 21:05:29
|- - Zdunek   Cytat(wookieb @ 24.11.2009, 21:05:29 ...   24.11.2009, 21:24:48
- - wookieb   Faktycznie był mały błąd. Poprawiony + podany wzór...   24.11.2009, 23:25:45
- - Zdunek   mam jeszcze jedno pytanko, w jaki sposób zrobić o...   25.11.2009, 20:06:57
- - wookieb   Oczywiście. Możesz zrobić to za pomocą atrybutu, a...   25.11.2009, 21:06:06
- - Zdunek   Cytatpublic function parsePhp($tag, &...   25.11.2009, 22:54:30
- - wookieb   Możesz. Przejrzyj zmienna $tag jaka dostajesz...   26.11.2009, 00:35:53
- - Zdunek   dzięki, udało się podczepić chyba znalazłem nastę...   26.11.2009, 16:09:44
- - wookieb   Nie jest to błąd tylko ustawienie. BbCodeSettings-...   26.11.2009, 16:42:18
- - Zdunek   Acha, dzięki a jeszcze jedna rzecz którą zauważył...   26.11.2009, 18:46:03
- - wookieb   Widocznie miałem wyłączone pokazywanie błędów. Pop...   28.11.2009, 19:56:24
- - Borys_   Witaj, Bardzo przyjemna klasa, kawałek dobrej rob...   1.12.2009, 02:48:47
- - wookieb   Da się przekonać. Jak pisałem na początku tagi są...   2.12.2009, 11:14:08
- - tog   mi sie podoba, sprobuje poczytac Twoj kod i sie cz...   4.01.2010, 20:18:43
- - Zdunek   Witam, znalazłem następny błąd tekst z tego artyku...   11.01.2010, 14:04:44
- - wookieb   Hmm nie zauważyłem takiej przypadłości. Mógłbyś wr...   12.01.2010, 10:26:09
- - Zdunek   http://wklejasz.pl/t.txt (plik kodowany w utf-8) i...   12.01.2010, 20:31:33
- - wookieb   Niestety u mnie sytuacja nadal nie występuje. O il...   12.01.2010, 20:49:31
- - Kamil Pietrzak   czekaj... czekaj nie wiem czemu myslalem, ze parse...   30.01.2010, 13:49:36
- - Crozin   1) Element B istnieje w XHTMLu 2) Dalece bardziej ...   30.01.2010, 14:45:42
- - wookieb   Cytat(Kamil Pietrzak @ 30.01.2010, 13:49...   30.01.2010, 19:20:38
- - Kamil Pietrzak   jestem za bardzo pro zeby pisac byle BB szukalem ...   4.02.2010, 20:37:06
- - GyniO   Czy istnieje możliwość do pisania w wartości titl...   14.02.2010, 09:39:29
|- - kallosz   Cytat(GyniO @ 14.02.2010, 09:39:29 ) ...   14.02.2010, 10:17:43
- - wookieb   Oczywiście, że jest i oczywiście, że wszystko jest...   14.02.2010, 09:43:37
- - GyniO   No fakt, za readme wziąłem inny plik i stąd moja n...   14.02.2010, 10:42:43
- - lobopol   A ja mam taki problem mam aktualnie taki układ pli...   13.03.2010, 14:45:24
- - wookieb   masz 2 wyjścia 1) dodać do include path katalog ...   13.03.2010, 14:51:44
- - lobopol   Wielkie dzięki już wszystko dobrze działa.   13.03.2010, 15:02:35
- - kenobi13   Zauważyłem drobny błąd chyba. W linijce 51 w pliku...   17.03.2010, 18:24:53
- - LapKom   Czy jest mozliwość usprawnienia biblioteki/filtru ...   21.03.2010, 21:28:24
- - wookieb   Cytat(kenobi13 @ 17.03.2010, 18:24:53...   21.03.2010, 22:18:32
- - LapKom   A w jaki sposób mogę użyć asterixa w nazwie taga? ...   22.03.2010, 20:47:49
- - wookieb   Cytat(kenobi13 @ 17.03.2010, 18:24:53...   22.03.2010, 23:47:15
- - LapKom   [PHP] pobierz, plaintext <?php /** * ...   23.03.2010, 01:03:17
- - wookieb   Ściągnij parser i skopiuj plik BbCode.class.php . ...   23.03.2010, 08:37:49
- - GyniO   Mam problem z funkcją do skracania. Przy skracani...   16.05.2010, 15:18:11
3 Stron V   1 2 3 >


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: 23.10.2019 - 04:16