Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [klasa] Zaawansowany parser bbcode (php5)
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
Stron: 1, 2, 3, 4, 5
wookieb
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
.radex
No nie wiem, czy zapis do bazy jest szybszy od sprawdzenia poprawności tagów. Wydaje mi się, że lepszym (szybszym) rozwiązaniem byłoby cache'owanie na dysku.

@down: a no fakt, nie zrozumiałem przeznaczenia. Mógłbyś dopisać do tej klasy cache'owanie - gdy implementowałem bbcode u siebie i robiłem benchmark, to przykładowy bbcode parsował się średnio 4ms, a przy włączonym cache'owaniu wczytywanie trwało średnio koło 0.2ms. jest różnica tongue.gif
wookieb
Cytat(.radex @ 2.03.2009, 19:05:57 ) *
No nie wiem, czy zapis do bazy jest szybszy od sprawdzenia poprawności tagów. Wydaje mi się, że lepszym (szybszym) rozwiązaniem byłoby cache'owanie na dysku.

Mi bardziej chodziło o to, że np gdy zapisujemy post to najpierw tworzymy wersję z poprawnym kodem i dopiero zapisujemy post w bazie. Przez co przy wyświetlaniu posta na stronie możemy zastosować szybszą wersję parsowania (z zaufanym kodem bb). No chyba, że ktoś zapisuje w bazie wersję htmlową ale to już jego sprawa smile.gif

Co do zapisywania na dysku to jak najbardziej. Ale to już zostawmy mechanizmowi cachowania smile.gif

//UP Cachowanie mam zrobione ale to już oddzielny mechanizm smile.gif.
WebKing
Cytat(wookieb @ 2.03.2009, 14:10:58 ) *
  1. <?php
  2. echo $bb->getParseText();
  3. ?>

Nie możesz w funkcji getParseText dać echo zamiast to ciągnąć?
pyro
Cytat(WebKing @ 9.03.2009, 18:28:58 ) *
Nie możesz w funkcji getParseText dać echo zamiast to ciągnąć?


NIE

Tak jest ok.
bim2
Cytat(WebKing @ 9.03.2009, 18:28:58 ) *
Nie możesz w funkcji getParseText dać echo zamiast to ciągnąć?

A jakbym chciał
mojaFunkcja($oBb->getParseText()) to co wtedy? Return zawsze jest najlepszym wyjściem.
gebp
Klasa działa fajnie. Jefnak z danego tutka nie jestem w stanie stworzyć dodatkowego znacznika. Chodzi mi o kolor.
Czyli
  1. CZERWONY


z podglądu wykoncypowałem tak ( dodane do filtra baisic po font)
  1. <?php
  2. ....
  3. 'color'=>array( 'open'=>'span',
  4.              'close'=>'span',
  5.              'attributes'=>array('color'=>array('attr'=>'style',
  6.                                                    'type'=>'string',
  7.                                                    'name'=>'color:'
  8.                    
  9.                                                       )
  10.                                           )
  11.            )    
  12. ...
  13. ?>


Jeżeli można proszę o pokazanie gdzie leży błąd.
Jak będę pewny to dodam sobie jeszcze underline
wookieb
I to był właśnie mój błąd którego nie ująłem we wstępnej dokumentacji
Wstępnie zakładałem następujące możliwości podania parametru:
"parametr ze spacja itd"
'parametr ze spacja'
[0-9][a-z] - tutaj nie łapało koloru.
Oczywiście był to mój błąd w założeniu.
Poprawka polega na zamianie liniii 391 na następującą
  1. <?php
  2. preg_match_all('/s*([a-z0-9-_]+)=('.+?'|".+?"|S*)s*/i', $text, $matches, PREG_SET_ORDER);
  3. ?>

Uaktualniłem paczkę na serwerze.
gebp
Dięki ~wookieb.

Z kolorem od razu pomogło.
Ja jednak (bardzo prawdopodone!) upośledzony. Nie czaje dokumentacji o dodawaniu dodatkowych znaczników. Od 2h próbuje utworzyć
  1. <span style="text-decoration: underline" ></span>

Jeżeli nie stanowi to problemu mógłbyś dać przykład tworzenia znacznika z "zaprogramowanymi" atrybutami (np. text-decoration: underline) jak i z dołączanymi (np. text-align: wyrównanie ).

no może z wyrównaniem sobie poradzę (jak wcześniej zrobiłem z "color") ale tak ku potomnym bo klasa działa naprawdę extra.
wookieb
Cytat(gebp @ 12.03.2009, 12:01:24 ) *
Jeżeli nie stanowi to problemu mógłbyś dać przykład tworzenia znacznika z "zaprogramowanymi" atrybutami (np. text-decoration: underline) jak i z dołączanymi (np. text-align: wyrównanie ).


Właśnie coś takiego robie i na dziś wieczorem ma być możliwośc dodawania domyślnych atrybutów i ich wartości.
zegarek84
aż z ciekawości jak wrócę ze studiów po weekendzie to sobie zerknę w kod... swoją drogą jak tak na szybko na przewijaniu zerknąłem to nie powinno być trudne w stosowaniu, składnią przypomina ale tak pobieżnie patrząc DOM z php
nrm
Bardzo ciekawa klasa, gratulacje. Wiem co mówię bo swego czasu wytestowałem takich z 10 i z każdą były większe lub mniejsze problemy winksmiley.jpg Trzeba tą odpicować i będzie gites winksmiley.jpg

Na szybko to co wpadło mi w oczy:
- brak automatycznej zamiany URLa na link (czyli http://jakisurl.pl/cos)
- tym samym brak skracania zbyt długich URLi (skracania samego opisu linka aby nie rozjechał treści serwisu)
- brak obsługi
Kod
[img]http://link.do.img[/img] jest tylko dziwne [img=url]

- od razu dodam żeby sprawdzać czy URL jest na pewno IMG
- include_once 'filters/'.$filter.'.php'; -> wywal bbcode aby można to było bez modyfikacji wszędzie ładować

Kod
application/libraries/bbcode/bbcode.class.php [458]:
in_array() [function.in-array]: Wrong datatype for second argument

bb_code->parse( [url=&quot;http://test.pl&quot;]
[url=http://test.pl]
[url='http://test.pl]
[url]http://test.pl[/url] )

musi być idiotoodporne winksmiley.jpg

Jak wrzucisz kolejną wersję to na pewno przetestuje. Mam ogromne ilości danych na których mogę to testować (w sensie treści userów z for).
SHiP
Ok sprawdziłem i dwie uwagi winksmiley.jpg

1. jeśli umieścimy coś między [ul] a [li] to nie zostanie to usunięte co powoduje wygenerowanie nievalidującego się kodu html
2. Wyrzuca błędy
  1. Warning: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file in /home/hellson/public_html/bbcode/bbcode/bbcode.class.php on line 234


Ja przy okazji zaspamuje i podrzucę link do swojego rozwiązania: http://forum.php.pl/index.php?showtopic=55195 winksmiley.jpg

Pozdrawiam
wookieb
Klasa została poprawiona i usprawniona. Dodałem wszystkie standardowe tagi bbcode.
Można ściągać i sprawdzić teraz.
slewin
a ja pobrałem klasę ,wypakowałem ją do katalogu na serwer oraz uruchomiłem plik test.php i moim oczom ukazał się błąd :
Kod
<b>Parse error</b>:  syntax error, unexpected T_ARRAY, expecting '&' or T_VARIABLE in <b>e:\usr\krasnal\www\paser bb\bbcode\data_validator.class.php</b> on line <b>251</b>

o co chodzi ? może to chodzi o serwer ,sprawdzę na innym .

faktycznie na innym działa dobrze ;] .
wookieb
Zapewne masz php4 zamiast php5
slewin
na jednym mam PHP Version 5.0.4 a na tym gdzie paser działa : PHP Version 5.2.6 .
wookieb
Cytat
PHP 5 introduces Type Hinting. Functions are now able to force parameters to be objects (by specifying the name of the class in the function prototype) or arrays (since PHP 5.1). However, if NULL is used as the default parameter value, it will be allowed as an argument for any later call.
slewin
testuje paser od jakiegoś czasu i przyzna,m że jest świetny . Mam tylko jedno pytanie : np. w bazie mam tresc a w tresci jest url z filmem do youtube i chcial bym go odrazu podmienic na odtwarzacz jak to zrobic ?
wookieb
Przykładowy filtr
youtube.php
  1. <?php
  2. class bbcode_filter_youtube
  3. {
  4.  
  5.    public $tags = array(
  6.        'youtube'=>array(
  7.            'open'    =>    'youtube', // tak naprawde moze byc tutaj cokolwiek bo i tak potem to wywalimy
  8.            'close'    =>    'youtube',
  9.            'notallowed_childs'=>    'all', // zadnych innych tagow w srodku nie potrzebujemy
  10.            'parseBody'    =>    'checkMovie'
  11.        );
  12.    );
  13.  
  14.    //$tag - wszystkie informacje o tagu. W naszym przypadku to co powyzej
  15.    // $openNode - tag otwierajacy
  16.    // $body - lista elementow zawartych pomiedzy tagami
  17.    // $closeNode - tag zamykajacy
  18.    public function checkMovie($tag, &$openNode, &$body, &$closeNode)
  19.    {
  20.        // wyciagamy caly tekst
  21.        $bodyStr='';
  22.        foreach($body as $el) $bodyStr.=$el['text'];
  23.        
  24.        // sprawdzamy czy ciag jest urlem
  25.        $str=data_validator::checkUrl($bodyStr);
  26.        
  27.        if($str==false)
  28.        {
  29.            return false;
  30.        }
  31.        
  32.        
  33.        // tag zamykajacy nie jest nam potrzebny wiec usuwamy z niego sam tekst
  34.        $closeNode['text']='';
  35.        
  36.        
  37.        $openNode['text']=' tutaj wpisujemy kod odpowiadajacy za wyswietlenie filmiku youtube ';
  38.        
  39.    }
  40. }
  41. ?>


Użycie tagu
Kod
[youtube]http://link/do/filmiku[/youtube]



Filtr dodajemy poprzez dodanie wartosci 'youtube' do tablicy
  1. <?php
  2. private $defaultFilters=array('basic', 'code', 'url', 'list', 'image', 'youtube');
  3. ?>

albo ładujemy do dynamicznie
  1. <?php
  2. $bbcode->loadFilter('youtube');
  3. ?>


UWAGA! Jest to tylko taki template do samodzielnego dokończenia kodu. To jak wyswietlimy filmik i co bedziemy chcieli wyciagnac z adresu potrzebne dane zalezy tylko od nas.

Według standardów na http://bbcode.org powinno sie używać
Kod
[youtube]id_movie[/youtube]

więc nic nie stoi na przeszkodzie, żeby to dorobić.
slewin
dzięki , już łapie o co chodzi winksmiley.jpg .
Będę się musiał trochę pomęczyć z tym bo przykładowy filmik ma taki oto god
Kod
<object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/hmcS8EyI0RQ&hl=pl&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param>
<embed src="http://www.youtube.com/v/hmcS8EyI0RQ&hl=pl&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object>


jak widać link do filmu jest w dwóch miejscach przy value oraz src ;/ . hmm myślę że przyjrzę się dokładnie filtrowi url i coś wykombinuje ;] .
pozdrawiam
wookieb
Wiec ten kod wstawiasz w miejsce
Kod
tutaj wpisujemy kod odpowiadajacy za wyswietlenie filmiku youtube

A url masz w $str.
slewin
Tak zrobiłem wcześniej ,ale nie było widać odtwarzacza , po kliknieciu prawym klawiszem myszy na miejsce gdzie powinnien być wyskakuje opis " film niewczytany..." a źródło wygląda tak
Kod
<object width="560" height="340">
<param name="movie" value="http://www.youtube.com/watch?v=TbSNHrSwm9M">
<param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always">
<embed src="http://www.youtube.com/watch?v=TbSNHrSwm9M" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></object>
http://www.youtube.com/watch?v=TbSNHrSwm9M

jak widać wywala znacznik </embed> , nie wiem czemu .
wookieb
Zacznijmy od tego, że raczej coś źle zrobiłeś bo mi nic nie ucinało.

Podsyłam cały filtr. Przyda się dla potomnych.
  1. <?php
  2. class bbcode_filter_youtube
  3. {
  4.  
  5.   public $tags = array(
  6.       'youtube'=>array(
  7.           'open'    =>    'youtube', // tak naprawde moze byc tutaj cokolwiek bo i tak potem to wywalimy
  8.           'close'    =>    'youtube',
  9.           'notallowed_childs'=>    'all', // zadnych innych tagow w srodku nie potrzebujemy
  10.           'parseBody'    =>    'checkMovie'
  11.       )
  12.   );
  13.  
  14.   //$tag - wszystkie informacje o tagu. W naszym przypadku to co powyzej
  15.   // $openNode - tag otwierajacy
  16.   // $body - lista elementow zawartych pomiedzy tagami
  17.   // $closeNode - tag zamykajacy
  18.    public function checkMovie($tag, &$openNode, &$body, &$closeNode)
  19.    {        
  20.        // wyciagamy caly tekst
  21.        $bodyStr='';
  22.        foreach($body as &$el)
  23.        {
  24.            $bodyStr.=$el['text'];
  25.            
  26.            // wersja do wyswietlenia
  27.            $el['text']='';
  28.        }
  29.      
  30.        // sprawdzamy czy ciag jest urlem
  31.        $str=data_validator::checkUrl($bodyStr);
  32.      
  33.        if($str==false)
  34.        {
  35.            $openNode=bb_code::removeNode($openNode);
  36.            $closeNode=bb_code::removeNode($closeNode);
  37.            return false;
  38.        }
  39.        
  40.        
  41.        // szukanie id filmu
  42.        if(preg_match('/watch?v=([a-zA-Z0-9_]+)/i', $str, $matches))
  43.        {
  44.            $idMovie=$matches[1];
  45.        }
  46.        else
  47.        {
  48.            $openNode=bb_code::removeNode($openNode);
  49.            $closeNode=bb_code::removeNode($closeNode);
  50.            return false;
  51.        }
  52.      
  53.        // zamkniecie nie jest nam potrzebne
  54.        $closeNode['text']='';
  55.        
  56.        // Ustawiamy content
  57.        $openNode['text']='<object width="425" height="344">
  58.    <param name="movie" value="http://www.youtube.com/v/'.$idMovie.'"></param>
  59.    <param name="allowFullScreen" value="true"></param>
  60.    <param name="allowscriptaccess" value="always"></param>
  61.    <embed src="http://www.youtube.com/v/'.$idMovie.'" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed>
  62. </object>';
  63.      
  64.       //ustawiamy link dla zaufanego bbcode
  65.       reset($body);
  66.       $body[key($body)]['tagText']=$str;
  67.   }
  68. }
  69. ?>
Fixer
może się przyda:) http://hobix.com/textile/quick.html
Fafu
Witam!
http://wookieb.pl/bbcode/cut_test.php - ten przykład nie działa poprawnie.
Chciałbym się dowiedzieć gdzie można wyłączyć automatyczne zamienianie & na &amp; ponieważ używam klasy convert charset i tam polskie litery są zapisywane do bazy w takim stylu: & #380 ; (bez spacji) i przy tej klasie bbcode zamiast litery pokazują się te znaki.
pozdrawiam
wookieb
Oczywiście masz rację.
Poprawiłem cut_test.php wraz z małym bugiem który znalazłem.

Jeżeli chodzi o twój problem to używam funkcji htmlspecialchars to zabezpieczenia przez wstrzykaniem htmla, możesz ją zamienić na następującą funkcje
  1. <?php
  2. $text=str_replace(array('<', '>'), array('&lt;', '&gt;'), $text);
  3. ?>

Aktualne miejsca w których trzeba to zastąpić to linia 826
  1. <?php
  2. else $str=htmlspecialchars($str);
  3. ?>

Linia 1077:
  1. <?php
  2. $it=htmlspecialchars($node['text']);
  3. ?>


Oczywiście w niektórych filtrach również występuje htmlspecialchars wiec wystarczy ze je przeszukasz i bedzie po kłopocie.
Szczerze mówiąc trochę nie rozumiem używania encji do kodowania polskich znaków, no ale jak tak robisz.
Fafu
Dzięki za odpowiedź, czy żeby u mnie działało wycinanie tekstu muszę pobrać paczkę od nowa? (czy aktualizowałeś coś?).

Używam encji żeby nie było problemów z kodowaniem np. przy przenoszeniu bazy danych winksmiley.jpg
wookieb
Tak aktualizowałem, pobierz nową paczkę smile.gif
Fafu
No niestety nadal coś nie działa...
wyświetla się:
Kod
[/Array][/Array][/Array][/Array]

oraz dużo błędów typu:
Kod
Warning: Illegal offset type in C:\Program Files\WebServ\httpd\forum\bbcode\bbcode.class.php on line 488
wookieb
Sprawdź czy aby napewno poprawnie ściągnąłeś nowe pliki.
Poprawiłem jeszcze błąd z call_time_pass_reference.

Jak widzisz na serwerze działa wszystko ok, poza tym jest całkiem nowy cut_test.php
http://wookieb.pl/bbcode/cut_test.php
Fafu
No niestety, ściągałem kilka razy i nic. Ciągle te same błędy.

EDIT: już działa winksmiley.jpg chodziło o cache przeglądarki - pobierało mi poprzedni plik.
pozdrawiam
slewin
a ja mam mały problem bo nie wiem jak stosować znacznik <img> zdjęcia ? mam np. taki oto kod
Kod
<img src="http://www.nazwawww.pl/www/yyy/xxx/zzz/fotak.jpg" border="0" height="100" width="100" alt="">

jak go zamienić by działał poprawnie questionmark.gif
wookieb
Nawet nie wiesz co to bbcode :/
http://bbcode.org/reference.php
mowgli91
Kurczę, nie mogę ogarnąć jednej rzeczy - chciałbym dodać znacznik [flash={szerokosc},{wysokość}]{url_obiektu_flash}[/flash] i nie mam pojęcia jak się za to zabrać ;/
MajareQ
Ja mam pytanko z całkiem innej sceny. Jaka jest licencja na używanie tej klasy?
wookieb
Do własnego jak i komercyjnego użytku.
Nie znam się specjalnie na licencjach więc niech będzie BSD
lysiu
U mnie śmiga, że hej!

Narazie poprawiłem jeden błąd:


błędnie: (bbcode/filter/youtube.php)
  1. $openNode['text']='<object width="425" height="344">
  2. <param name="movie" value="http://www.youtube.com/v/'.$idMovie.'"></param>
  3. <param name="allowFullScreen" value="true"></param>
  4. <param name="allowscriptaccess" value="always"></param>
  5. <embed src="http://www.youtube.com/v/'.$idMovie.'" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed>
  6. </object>';


prawidłowo: (bbcode/filter/youtube.php)
  1. $openNode['text']='<object type="application/x-shockwave-flash" style="width:425px; height:350px;" data="http://www.youtube.com/v/'.$idMovie.'"><param name="movie" value="http://www.youtube.com/v/'.$idMovie.'" /></object>';


a jeszcze kilka jest, później popoprawiam.

a tu (jak chcecie!) możecie zobaczyć jak to u mnie se śmiga:

(spoiler:)

Księga Gości!


biggrin.gif jak dla mnie bomba! Wielkie dzięki za ten skrypt, samemu by mi się chyba nie chciało sad.gif

edit: coś wam (forum) "spoiler" w bbcode cienko działa snitch.gif
MajareQ
Cytat(wookieb @ 22.09.2009, 18:19:50 ) *
Do własnego jak i komercyjnego użytku.
Nie znam się specjalnie na licencjach więc niech będzie BSD


Gwoli ścisłości - mogę używać w projekcie, który tworzę na zlecenie?
wookieb
Tak
lysiu
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 [])
wookieb
Cytat(lysiu @ 23.09.2009, 01:10:14 ) *
prawidłowo: (bbcode/filter/youtube.php)

Zapomniałeś o części dość ważnych parametrów. Wrzucam tak jak każą.


Cytat(lysiu @ 23.09.2009, 11:34:20 ) *
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
  1. if($tagInfo === null)
  2. {
  3. // to nie jest tag bbcode (prawdopodobnie zwykly tekst)
  4. $node['text']=$text;
  5. $node['type']=self::NODE_TYPE_TEXT;
  6. return $node;
  7. }


zamieniasz na
  1. if($tagInfo === null)
  2. {
  3. $node['text'] = '';
  4. $node['type'] = self::NODE_TYPE_TEXT;
  5. return $node;
  6. }
Spawnm
UPDATE PARSERA.
Wszystkie nowinki w pierwszym poście. http://forum.php.pl/index.php?showtopic=115269
c3zi
Wszystko fajnie wygląda. Brakuje tylko integracji z Kohaną ;-)
wookieb
A co za problem zintegrować to samemu? A dlaczego phpmailer nie jest zintegrowany z kohana, albo z ZF? Integrujcie sobie gdzie chcecie.
c3zi
Swift jest zintegrowany w kohana.
Z tą integracją żartowałem. Fajnie napisana biblioteka smile.gif



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.
wookieb
Pokaż jak zaimplementowałeś geshi.
c3zi
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.
wookieb
1) A readme.html czytał?
2) Opcje leave_* opisane w manualu, dokumentacja BbCodeSettings również się kłania.
karol98
przyda się smile.gif
użyję w swoim skrypcie
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.