Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

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





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
- - boro11   Witam! Od jakiegoś czasu używam Twojego parser...   3.04.2013, 20:38:54
- - wookieb   Faktycznie był mały błąd w parserze. Poprawione - ...   3.04.2013, 21:16:28
- - boro11   Teraz działa idealnie dziękuję   3.04.2013, 22:20:49
- - Lirdoner   Witam, chciałbym aby jeżeli tekst odnośnika do str...   19.04.2013, 12:15:08
- - wookieb   https://github.com/wookieb/bbcode/blob/mast...Filt...   19.04.2013, 17:08:48
- - benzulli   Witam, Jak mogę to umieścić na swojej stronie? Ch...   18.01.2014, 23:49:44
- - wookieb   Musisz zastosować parser bbcode przy zapisie aby z...   19.01.2014, 07:13:58
- - benzulli   [PHP] pobierz, plaintext <form action="...   19.01.2014, 13:24:40
- - wookieb   Najpierw naucz się programować. Koniec dyskusji.   19.01.2014, 14:02:16
- - benzulli   Witam, poradziłem sobie z tym już jakiś czas temu,...   15.02.2014, 21:36:58
- - com   pokaż to na przykładzie, bo wrzuciłeś jakieś fragm...   15.02.2014, 21:41:34
- - benzulli   [PHP] pobierz, plaintext blablablablabla 123123131...   15.02.2014, 21:58:02
- - com   Źródło prawdę Ci powie, nwm co to za parser ale co...   15.02.2014, 22:08:05
- - benzulli   Wiem co jest nie tak - po prostu każde przeniesien...   15.02.2014, 23:49:37
- - com   tak ale wgl poco Ci to br tu? przecież jego to się...   16.02.2014, 00:39:59
- - benzulli   Właśnie go nie chcę, a to jest w parserze ustawion...   16.02.2014, 00:43:52
- - com   no to warunkiem sprawdzaj czy jesteś w tabeli jeśl...   16.02.2014, 00:59:31
- - benzulli   Dzięki, po prostu zastosuję preg_replace do tych 6...   16.02.2014, 08:59:28
- - pionas   I ja podepnę się do tematu.. ckeditor z wtyczką b...   17.02.2014, 09:03:54
- - sazian   kiedyś przerabiałem ten problem z listami może ko...   22.06.2014, 21:51:14
- - szajens   Przepuszcza 2 razy </b> co może troszkę zeps...   6.07.2014, 10:57:02
- - boro11   Hej, przejrzałem dokumentację i parę tagów dostoso...   6.08.2014, 04:04:36
- - Forti   Ze względu na beznadzieje parserów BBcode dla symf...   14.12.2014, 11:08:42
- - wookieb   Z przyjemnością Jak dodasz to umieszczę potem lin...   14.12.2014, 11:35:43
- - Forti   Wookie pilnuj mnie Całość mam już gotowe - troch...   5.02.2015, 22:38:03
- - wookieb   Na pewno zrobisz to lepiej Pisałem to tak dawno ...   6.02.2015, 05:26:04
- - pionas   Hej, po aktualizacji PHP do 5.4.38 parser nie dzi...   1.03.2015, 19:35:18
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: 16.10.2025 - 22:13