![]() |
![]() |
![]()
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
#41
|
|
![]() Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 22.09.2009 Skąd: śląsk Ostrzeżenie: (0%) ![]() ![]() |
no i na przykład do img nie dodajesz alt i nie zamykasz znacznika /> to się też nie waliduje w strict
tak myślę, że przydała by się możliwość wyłączenia niektóych znaczników (bo teraz to nie wiem gdzie to zedytować?) i zamieniania nieznanych znaczników na '' (puste). np jak ktoś wpisze [ble]cos[/ble] -> cos (bez []) Ten post edytował lysiu 23.09.2009, 12:02:13 -------------------- moje wypociny
|
|
|
![]()
Post
#42
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
prawidłowo: (bbcode/filter/youtube.php) Zapomniałeś o części dość ważnych parametrów. Wrzucam tak jak każą. no i na przykład do img nie dodajesz alt i nie zamykasz znacznika /> to się też nie waliduje w strict Zaraz wrzucam nowa wersje to bedzie poprawione Cytat tak myślę, że przydała by się możliwość wyłączenia niektóych znaczników (bo teraz to nie wiem gdzie to zedytować?) i zamieniania nieznanych znaczników na '' (puste). np jak ktoś wpisze [ble]cos[/ble] -> cos (bez []) A pomyślaleś co będzie jak ktos bedzie chcial wpisac tekst, ktory jest miedzy nawiasami? np "Byłem u lekarz [tego na Przytockiej]" Ale oczywiscie mozna to zrobic. W nowej wersji linia 686
zamieniasz na
-------------------- |
|
|
![]()
Post
#43
|
|
![]() Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa ![]() |
|
|
|
![]()
Post
#44
|
|
![]() Grupa: Zarejestrowani Postów: 266 Pomógł: 20 Dołączył: 15.11.2006 Skąd: Koszalin Ostrzeżenie: (0%) ![]() ![]() |
Wszystko fajnie wygląda. Brakuje tylko integracji z Kohaną ;-)
-------------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
![]()
Post
#45
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
A co za problem zintegrować to samemu? A dlaczego phpmailer nie jest zintegrowany z kohana, albo z ZF? Integrujcie sobie gdzie chcecie.
-------------------- |
|
|
![]()
Post
#46
|
|
![]() Grupa: Zarejestrowani Postów: 266 Pomógł: 20 Dołączył: 15.11.2006 Skąd: Koszalin Ostrzeżenie: (0%) ![]() ![]() |
Swift jest zintegrowany w kohana.
Z tą integracją żartowałem. Fajnie napisana biblioteka ![]() Implementował ktoś Geshi dla [code] ? Coś u mnie nie interpretuje tego jak powinien. Wychodzi kod potraktowany jakby htmlspecialchars. htmlspecialchars_decode nic nie pomaga ... hmm.. Jeśli formatuje kod np. java jest ok. Jeśli zaś formatuje kod jako php oraz posiada znaczniki <?php ... ?> nie interpretuje tego dobrze, nie wyświetla nawet textarea geshi. Natomiast kod php bez znaczników <?php, ?> wyświetla okno textarea geshi, z tym że nie interpretuje kodu. -------------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
![]()
Post
#47
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Pokaż jak zaimplementowałeś geshi.
-------------------- |
|
|
![]()
Post
#48
|
|
![]() Grupa: Zarejestrowani Postów: 266 Pomógł: 20 Dołączył: 15.11.2006 Skąd: Koszalin Ostrzeżenie: (0%) ![]() ![]() |
Mam dwa pytania.
1. Jest jakaś opcja dostarczenia do tego parsera listy dozwolonych tagów? 2. Jeśli istnieje taka lista to jak do pozostałych tagów dodawać spację np. użytkownik poda <nowy_tag>, chcę uzyskać < nowy_tag. Chodzi o to, aby nie traktował błędnego tagu jako kod html. -------------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
![]()
Post
#49
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
1) A readme.html czytał?
2) Opcje leave_* opisane w manualu, dokumentacja BbCodeSettings również się kłania. -------------------- |
|
|
![]()
Post
#50
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 12.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
przyda się
![]() użyję w swoim skrypcie |
|
|
![]()
Post
#51
|
|
![]() Grupa: Zarejestrowani Postów: 266 Pomógł: 20 Dołączył: 15.11.2006 Skąd: Koszalin Ostrzeżenie: (0%) ![]() ![]() |
Jeszcze jedno pytanie. Da się zrobić odwrotną konwersję, czyli html->bbcode ?
-------------------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
![]()
Post
#52
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Tak da się tworząc filtry odwrotne. Aczkolwiek takiej możliwości jeszcze nie udostępniłem.
-------------------- |
|
|
![]()
Post
#53
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 2 Dołączył: 29.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
nie wiem czy to tylko u mnie, czy znalazłem buga
jeśli w parsowanym kodzie jest link powiedzmy http://www.wp.pl/cos to przestaje działać dodawanie <br/> w znakach nowej linii ![]() więc pytanie, co jest nie tak, bądź jak zdebugować to. PS: Mam klasę zintegrowaną z Kohaną, sam do końca nie wiem czy poprawnie |
|
|
![]()
Post
#54
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
@Zdunek Poprawiłem błąd, Dzięki za info
![]() -------------------- |
|
|
![]()
Post
#55
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 2 Dołączył: 29.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#56
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Linia 1233
-------------------- |
|
|
![]()
Post
#57
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 2 Dołączył: 29.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Linia 1233 dzięki znalazłem już następny błąd link na przykładzie http://www.1980-games.com/us/old-games/nin...3;/big-game.php po !/ przestaje być linkiem Edit: przy autolinkowaniu nie działają także linki typu http://www.radareklamy.org/uchwala,163.html ucina przy przecinku Ten post edytował Zdunek 5.11.2009, 21:51:13 |
|
|
![]()
Post
#58
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Wielkie dzięki
![]() Przyznam, że wyrażenie skądś kopiowałem i przyznam, że nie ma to jednak jak zrobić coś samemu ![]() Poprawki: Url.php (98) DataValidator.class.php (141) Oczywiście + za doraźną pomoc ![]() -------------------- |
|
|
![]()
Post
#59
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 2 Dołączył: 29.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Wielkie dzięki ![]() Przyznam, że wyrażenie skądś kopiowałem i przyznam, że nie ma to jednak jak zrobić coś samemu ![]() Oczywiście + za doraźną pomoc ![]() To ja dziękuję za parser ![]() 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" ![]() |
|
|
![]()
Post
#60
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Przetestowałem link i jest ok. Proszę upewnij się czy na pewno masz poprawną wersję. Chodzi tylko o wyrażenia regularne więc mogło ci sie coś pomotać, albo coś nadpisałeś
![]() Cytat 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 ? Chodzi ci o sam czysty tekst? Jeżeli tak to aktualnie nie brałem takiej opcje pod uwagę (a może faktycznie się przydać). Aczkolwiek możesz to uczynić trochę okrężną drogą. Pobrać zajawkę i wywalić z niej html, pomyślę nad tym. -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 07:08 |