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
 
Start new topic
Odpowiedzi
wookieb
post 5.11.2009, 23:21:38
Post #2





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




Wielkie dzięki smile.gif
Przyznam, że wyrażenie skądś kopiowałem i przyznam, że nie ma to jednak jak zrobić coś samemu smile.gif

Poprawki:
Url.php (98)
DataValidator.class.php (141)

Oczywiście + za doraźną pomoc smile.gif


--------------------
Go to the top of the page
+Quote Post
Zdunek
post 7.11.2009, 14:51:37
Post #3





Grupa: Zarejestrowani
Postów: 57
Pomógł: 2
Dołączył: 29.08.2008

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


Cytat(wookieb @ 5.11.2009, 23:21:38 ) *
Wielkie dzięki smile.gif
Przyznam, że wyrażenie skądś kopiowałem i przyznam, że nie ma to jednak jak zrobić coś samemu smile.gif
Oczywiście + za doraźną pomoc smile.gif

To ja dziękuję za parser winksmiley.jpg

mam jeszcze pytanko, jak zrobić by zajawka była bez znaczników bb ale by ten kod nie miał także htmla, tz. był tylko bez bbcode ?

Edit:
chyba jednak ciągle jest błąd
http://www.radareklamy.org/uchwala,163.html + tekst
wywala takie coś
";/null"

biggrin.gif
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 05:09