Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Algorytmy, klasy, funkcje _ [klasa] Zaawansowany parser bbcode (php5)

Napisany przez: wookieb 2.03.2009, 14:10:58

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

Napisany przez: .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.

@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

Napisany przez: wookieb 2.03.2009, 19:14:15

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.

Napisany przez: WebKing 9.03.2009, 18:28:58

Cytat(wookieb @ 2.03.2009, 14:10:58 ) *
  1. <?php
  2. http://www.php.net/echo $bb->getParseText();
  3. ?>

Nie możesz w funkcji getParseText dać echo zamiast to ciągnąć?

Napisany przez: pyro 9.03.2009, 18:49:06

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


NIE

Tak jest ok.

Napisany przez: bim2 10.03.2009, 18:35:29

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.

Napisany przez: gebp 11.03.2009, 21:33:51

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

Napisany przez: wookieb 11.03.2009, 23:01:22

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. http://www.php.net/preg_match_all('/s*([a-z0-9-_]+)=('.+?'|".+?"|S*)s*/i', $text, $matches, PREG_SET_ORDER);
  3. ?>

Uaktualniłem paczkę na serwerze.

Napisany przez: gebp 12.03.2009, 12:01:24

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. <http://december.com/html/4/element/span.html style="text-decoration: underline" ></http://december.com/html/4/element/span.html>

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.

Napisany przez: wookieb 12.03.2009, 12:03:07

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.

Napisany przez: zegarek84 12.03.2009, 12:21:00

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

Napisany przez: normanos 12.03.2009, 19:16:52

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).

Napisany przez: SHiP 17.03.2009, 17:44:53

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

Napisany przez: wookieb 14.05.2009, 08:49:51

Klasa została poprawiona i usprawniona. Dodałem wszystkie standardowe tagi bbcode.
Można ściągać i sprawdzić teraz.

Napisany przez: slewin 14.05.2009, 13:38:36

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 ;] .

Napisany przez: wookieb 14.05.2009, 13:43:08

Zapewne masz php4 zamiast php5

Napisany przez: slewin 14.05.2009, 13:47:14

na jednym mam PHP Version 5.0.4 a na tym gdzie paser działa : PHP Version 5.2.6 .

Napisany przez: wookieb 14.05.2009, 13:50:47

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 http://pl2.php.net/manual/pl/language.types.null.php is used as the default parameter value, it will be allowed as an argument for any later call.

Napisany przez: slewin 28.05.2009, 13:48:38

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 ?

Napisany przez: wookieb 28.05.2009, 14:09:51

Przykładowy filtr
youtube.php

  1. <?php
  2. class bbcode_filter_youtube
  3. {
  4.  
  5.    public $tags = http://www.php.net/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=http://www.php.net/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ć.

Napisany przez: slewin 28.05.2009, 15:11:32

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

Napisany przez: wookieb 28.05.2009, 15:12:43

Wiec ten kod wstawiasz w miejsce

Kod
tutaj wpisujemy kod odpowiadajacy za wyswietlenie filmiku youtube

A url masz w $str.

Napisany przez: slewin 28.05.2009, 15:37:29

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 .

Napisany przez: wookieb 28.05.2009, 18:40:55

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 = http://www.php.net/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(http://www.php.net/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.       http://www.php.net/reset($body);
  66.       $body[http://www.php.net/key($body)]['tagText']=$str;
  67.   }
  68. }
  69. ?>

Napisany przez: Fixer 30.05.2009, 12:41:38

może się przyda:) http://hobix.com/textile/quick.html

Napisany przez: Fafu 23.06.2009, 23:21:59

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

Napisany przez: wookieb 24.06.2009, 09:20:51

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=http://www.php.net/str_replace(http://www.php.net/array('<', '>'), http://www.php.net/array('&lt;', '&gt;'), $text);
  3. ?>

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

Linia 1077:
  1. <?php
  2. $it=http://www.php.net/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.

Napisany przez: Fafu 24.06.2009, 12:00:29

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

Napisany przez: wookieb 24.06.2009, 12:04:21

Tak aktualizowałem, pobierz nową paczkę smile.gif

Napisany przez: Fafu 24.06.2009, 12:13:31

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

Napisany przez: wookieb 24.06.2009, 12:27:49

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

Napisany przez: Fafu 24.06.2009, 12:37:06

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

Napisany przez: slewin 27.06.2009, 11:09:49

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

Napisany przez: wookieb 27.06.2009, 12:40:44

Nawet nie wiesz co to bbcode :/
http://bbcode.org/reference.php

Napisany przez: mowgli91 8.07.2009, 16:03:37

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ć ;/

Napisany przez: MajareQ 22.09.2009, 16:24:20

Ja mam pytanko z całkiem innej sceny. Jaka jest licencja na używanie tej klasy?

Napisany przez: wookieb 22.09.2009, 17:19:50

Do własnego jak i komercyjnego użytku.
Nie znam się specjalnie na licencjach więc niech będzie BSD

Napisany przez: lysiu 23.09.2009, 00:10:14

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:)

http://lysiu.pl/kg/!


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

Napisany przez: MajareQ 23.09.2009, 09:38:23

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?

Napisany przez: wookieb 23.09.2009, 09:39:59

Tak

Napisany przez: lysiu 23.09.2009, 10:34:20

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 [])

Napisany przez: wookieb 1.10.2009, 09:34:26

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. }

Napisany przez: Spawnm 2.10.2009, 10:19:08

UPDATE PARSERA.
Wszystkie nowinki w pierwszym poście. http://forum.php.pl/index.php?showtopic=115269

Napisany przez: c3zi 8.10.2009, 11:49:17

Wszystko fajnie wygląda. Brakuje tylko integracji z Kohaną ;-)

Napisany przez: wookieb 8.10.2009, 11:58:03

A co za problem zintegrować to samemu? A dlaczego phpmailer nie jest zintegrowany z kohana, albo z ZF? Integrujcie sobie gdzie chcecie.

Napisany przez: c3zi 8.10.2009, 20:08:38

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.

Napisany przez: wookieb 8.10.2009, 20:14:07

Pokaż jak zaimplementowałeś geshi.

Napisany przez: c3zi 22.10.2009, 13:46:49

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.

Napisany przez: wookieb 22.10.2009, 20:24:30

1) A readme.html czytał?
2) Opcje leave_* opisane w manualu, dokumentacja BbCodeSettings również się kłania.

Napisany przez: karol98 23.10.2009, 18:03:13

przyda się smile.gif
użyję w swoim skrypcie

Napisany przez: c3zi 24.10.2009, 20:11:21

Jeszcze jedno pytanie. Da się zrobić odwrotną konwersję, czyli html->bbcode ?

Napisany przez: wookieb 24.10.2009, 23:40:21

Tak da się tworząc filtry odwrotne. Aczkolwiek takiej możliwości jeszcze nie udostępniłem.

Napisany przez: Zdunek 26.10.2009, 12:28:53

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 biggrin.gif
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

Napisany przez: wookieb 27.10.2009, 21:53:43

@Zdunek Poprawiłem błąd, Dzięki za info smile.gif

Napisany przez: Zdunek 29.10.2009, 23:12:26

Cytat(wookieb @ 27.10.2009, 22:53:43 ) *
@Zdunek Poprawiłem błąd, Dzięki za info smile.gif

no i znowu będę musiał integrować z Kohaną tongue.gif
Jeśli możesz powiedzieć jakie linijki są do zmiany, będę bardzo wdzięczny

Napisany przez: wookieb 29.10.2009, 23:17:35

Linia 1233

Napisany przez: Zdunek 5.11.2009, 21:50:44

Cytat(wookieb @ 29.10.2009, 23:17:35 ) *
Linia 1233

dzięki

znalazłem już następny błąd
link na przykładzie
http://www.1980-games.com/us/old-games/nintendo/k/Kunio_Kun_no_Jidaigeki_Dayo_Zenin_Shuugou!/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

Napisany przez: 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

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

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

Napisany przez: Zdunek 7.11.2009, 14:51:37

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

Napisany przez: wookieb 7.11.2009, 15:05:56

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ś smile.gif

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.

Napisany przez: Zdunek 7.11.2009, 15:13:36

Cytat(wookieb @ 7.11.2009, 15:05:56 ) *
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ś smile.gif

Jednak moja wina biggrin.gif patrzałem na zły wpis ;]

Cytat
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.

tak czysty tekst
daję na przykładzie
http://wklejasz.pl/user/zobacz/Zdunek
o wiele lepiej by było gdyby znaczniki poznikały, ew by b i u zmieniły się w html a cała reszta by zniknęła(głównie obrazki, filmiki YT itp.) z wiadomych powodów smile.gif

Napisany przez: wookieb 8.11.2009, 15:44:10

Pomysł ciekawy. Dlatego dodałem do tagów opcję hide_body_in_cut_text (domyślnie w img i youtube). Oznacza ona, że zawartość danego taga nie będzie pokazywana, ani nie będzie wpływała na długość zajawki w skracanym tekście.

Wcześniej była opcja w ustawieniach parsera (BbCodeSettings) o nazwie availableTags. Jest ona tablicą w której podajemy nazwy tagów, które są dostępne w parserze. Rozszerzyłem opcje o "removeNotAvailableTags" (domyślnie true). Oznacza ona czy usuwać tagi, które nie są dostępne. Wygląda to w ten sposób

Kod
$bbcode = new BbCode();
$text = '[i]Tekst[/i] [b]do skrócenia[/b] [img]Adres obrazka[/img] Dodatkowy tekst[/i]';
$bbcode->getSettings()->availableTags = array('i', 'img'); //img jest konieczny aby parser wiedział, żeby go NIE pokazywać przy cutText
$bbcode->parse($text);
echo $bbcode->cutText(20);
// mniej więcej coś takiego [i]Tekst[/i] do skrócenia ...


Zmiany w plikach
Image.php (dodana opcja)
Youtube.php (dodana opcja)
BbCode.class.php (Zmiany w metodach _createNode, _filtersParseBody, cutText)
BbCodeSettings.class.php (poprawiono komentarze, dodano opcję removeNotAvailableTags)

Napisany przez: Zdunek 24.11.2009, 17:42:05

mam pytanko, w jaki sposób podczepić GeSHi ?
znalazłem gdzie
// tutaj mozemy dodać geshi czy to tez sie podoba
ale nie mam bladego pojęcia w jaki sposób to uczynić biggrin.gif

Edit:
Próbowałem tak łopatologicznie wstawić

ale tak jak ktoś wcześniej pisał, wywala jakby ktoś przeleciał htmlspecialchars...
funkcja:

  1. public function parseCode($tag, $openNode, $body, $closeNode)
  2. {
  3. $source = $body[0]['text'];
  4. $language = 'php';
  5. $path = 'geshi/';
  6.  
  7. $geshi = new GeSHi($source, $language, $path);
  8. $body[0]['text'] = htmlspecialchars_decode($geshi->parseCode());
  9.  
  10. // tutaj mozemy dodać geshi czy to tez sie podoba
  11. $openNode['text'].='<div class="code_title">Kod</div><pre class="prettyprint">';
  12. $closeNode['text']='</pre>'.$closeNode['text'];
  13.  
  14. }

Napisany przez: wookieb 24.11.2009, 21:05:29

Jest to zabezpieczenie przed tym aby czasem autor filtra, nie zapomniał o zabezpieczeniu przed xss. Dlatego dodajemy flage "nohtmlspecialchars" aby przy budowanie tekstu końcowego, nie traktował danego NODE'a htmlspecialchars.

  1. $body[0]['text'] =$geshi->parseCode();
  2. $body[0]['nohtmlspecialchars'] = 1;


Napisany przez: Zdunek 24.11.2009, 21:24:48

Cytat(wookieb @ 24.11.2009, 21:05:29 ) *
Jest to zabezpieczenie przed tym aby czasem autor filtra, nie zapomniał o zabezpieczeniu przed xss. Dlatego dodajemy flage "nohtmlspecialchars" aby przy budowanie tekstu końcowego, nie traktował danego NODE'a htmlspecialchars.
  1. $body[0]['text'] =$geshi->parseCode();
  2. $body[0]['nohtmlspecialchars'] = 1;

wrzuciłem to, niestety nie zadziałało

Napisany przez: wookieb 24.11.2009, 23:25:45

Faktycznie był mały błąd. Poprawiony + podany wzór używania geshi

Zmiana plików:
Filters/Url.php
Filters/Code.php (funkcja obsługująca geshi zakomentowana )

Napisany przez: Zdunek 25.11.2009, 20:06:57

mam jeszcze jedno pytanko,
w jaki sposób zrobić obsługę na zasadzie
będzie

  1. [code lang='php']jakiś skrypt php[/code]
  2. [code lang='java'] jakiś skrypt java[/code]

i by do geshi podawało ten atrybut lang ? próbowałem się wzorować na Url ale niestety nic mi z tego nie wyszło

Napisany przez: wookieb 25.11.2009, 21:06:06

Oczywiście.
Możesz zrobić to za pomocą atrybutu, albo zlecić to oddzielnym tagom.

1) Atrybut
a) Należy stworzyć ustawienia twojego atrybutu (szczegóły w readme)

  1. public $tags=http://www.php.net/array(
  2. 'code'=>array(
  3. 'open'=>'div class="code_wrapper"',
  4. 'close'=>'div',
  5. 'notallowed_child'=>'all',
  6. 'leave_notallowed_child'=>1,
  7. 'leave_notallowed_parent'=>1,
  8. 'parse_body'=>'parseCode',
  9. 'attributes'=>array(
  10. 'lang'=>array(
  11. 'type'=>'string',
  12. 'values'=>array('php', 'js')
  13. )
  14. )
  15. )
  16. );


Atrybut jaki posiada tag jest w tagu otwierającym
  1. public function parseCode($tag, &$openNode, &$body, &$closeNode)
  2. {
  3. $language = 'default';
  4. if(http://www.php.net/isset($openNode['attributes']['tag_attributes']['lang']))
  5. {
  6. $language = $openNode['attributes']['tag_attributes']['lang'];
  7. }
  8.  
  9. // dalszy kod
  10. }


Druga lepsza opcja to utworzenie taga dla każdego języka
  1.  
  2. public $tags=http://www.php.net/array(
  3. 'php'=>array(
  4. 'open'=>'div class="code_wrapper"',
  5. 'close'=>'div',
  6. 'notallowed_child'=>'all',
  7. 'leave_notallowed_child'=>1,
  8. 'leave_notallowed_parent'=>1,
  9. 'parse_body'=>'parsePHP'
  10. ),
  11. 'code'=>array(
  12. 'open'=>'div class="code_wrapper"',
  13. 'close'=>'div',
  14. 'notallowed_child'=>'all',
  15. 'leave_notallowed_child'=>1,
  16. 'leave_notallowed_parent'=>1,
  17. 'parse_body'=>'parseCode'
  18. )
  19. );
  20.  
  21. public function parserPhp($tag, &$openNode, &$body, &$closeNode)
  22. {
  23. $language = 'php';
  24. $this->parseCode($tag, $openNode, $body, $closeNode, 'php');
  25. }
  26.  
  27.  
  28. public function parseCode($tag, &$openNode, &$body, &$closeNode, $language = 'default')
  29. {
  30. // laczymy tresc w całość
  31.  
  32. $content = '';
  33. foreach($body as $key => &$node)
  34. {
  35. $content.= $node['text'];
  36. $node['text'] = '';
  37.  
  38. // usuwamy zbedne elementy
  39. if($key!=0) http://www.php.net/unset($body[$key]);
  40. }
  41.  
  42. require_once 'class.geshi.php';
  43.  
  44.  
  45. $geshi = new GeSHi($content, $language);
  46. $body[0]['tagText'] = $content;
  47. $body[0]['text'] = $geshi->parseCode();
  48. $body[0]['nohtmlspecialchars'] = 1;
  49.  
  50. $openNode['text'].='<div class="code_title">Kod</div><div class="code_area">';
  51. $closeNode['text']='</div>'.$closeNode['text'];
  52. }

Wybór należy do Ciebie.

Napisany przez: Zdunek 25.11.2009, 22:54:30

Cytat
public function parsePhp($tag, &$openNode, &$body, &$closeNode)
{
$language = 'php';
$this->parseCode($tag, $openNode, $body, $closeNode, 'php');
}


jakby ktoś kiedyś przeglądał, powyżej była literówka smile.gif

a idzie zrobić tak aby dodawać tylko
  1. 'c'=>array(
  2. 'open'=>'div class="code_wrapper"',
  3. 'close'=>'div',
  4. 'notallowed_child'=>'all',
  5. 'leave_notallowed_child'=>1,
  6. 'leave_notallowed_parent'=>1,
  7. 'parse_body'=>'parseC'
  8. ),

a była jedna funkcja parsująca to? zaoszczędziło by to sporo czasu i ułatwiło całość

Napisany przez: wookieb 26.11.2009, 00:35:53

Możesz. Przejrzyj zmienna $tag jaka dostajesz do funkcji i kombinuj smile.gif

Napisany przez: Zdunek 26.11.2009, 16:09:44

dzięki, udało się podczepić

chyba znalazłem następny błąd biggrin.gif

f(x) \xrightarrow{T_{[1,5]}}g(x)
zmienia się w
f(x) \xrightarrow{T_{}}g(x)

Napisany przez: wookieb 26.11.2009, 16:42:18

Nie jest to błąd tylko ustawienie.
BbCodeSettings->removeNotAvailableTags
ustaw na false

Napisany przez: Zdunek 26.11.2009, 18:46:03

Acha, dzięki

a jeszcze jedna rzecz którą zauważyłem
przy ustawianiu wielkości czcionek, jeśli czcionka jest za duża, bądź za mała to wywala błąd, mi w kohanaphp pokazuje
'Out of range (maximal)' myślę że lepszą opcją byłoby po prostu ustawienie tej wielkości to maksymalnej bądź minimalnej, a nie wywalenie błędu

Napisany przez: wookieb 28.11.2009, 19:56:24

Widocznie miałem wyłączone pokazywanie błędów.
Poprawka oczywiście na serwerze
Dodano @ przed wywołaniami metod DataValidatora w metodzie _parseAttributes
Poprawiłem również metodę _getTagInfo oraz _createNode

Napisany przez: Borys_ 1.12.2009, 02:48:47

Witaj,

Bardzo przyjemna klasa, kawałek dobrej roboty.

Mam jednak z nią pewien zgryz - czy da się ją przekonać do parsowania składni list znanej z phpBB?
Chodzi mi o formatowanie typu jak w tym forum:

[ list]
[*]a
[*]b
[*]c
[/list]

oraz

[ list=1]
[*]a
[*]b
[*]c
[/list]

Takie tagi to koszmar każdego parsera tworzonego pod składnię znaną z html (a ten na taki wygląda). Moje próby spełzły na niczym - zrobiłem to dookoła modyfikując javascriptowy edytor pod składnię parsera. Da się to jakoś rozwiązać?

Napisany przez: wookieb 2.12.2009, 11:14:08

Da się przekonać.
Jak pisałem na początku tagi są dostosowane do "standardu" z http://bbcode.org/reference.php

Oczywiście da się zrobić tak jak chcesz. Niestety nie jestem w stanie tego zrobić za ciebie w najbliższym czasie dlatego dam małe podpowiedzi.
I zamieniasz włąściwość $tags

  1. public $tags=http://www.php.net/array(
  2. 'list'=>array(
  3. 'open'=>'ul',
  4. 'close'=>'ul',
  5. 'wrap_white_space'=>true,
  6. 'allowed_child'=>array('li'),
  7. 'notallowed_parent'=>array('list'),
  8. 'parse_body'=>'parseList'
  9. ),
  10. '*'=>array(
  11. 'open'=>'li',
  12. 'close'=>false,
  13. 'allowed_parent'=>array('list')
  14. )
  15. );


Co dalej?
Piszesz kod obsługi listy parseList do której dostajesz następujące argumenty
$tag - tablica informacji o tagu ( w naszym przypadku o tagu list)
&$openNode - tag otwierajacy
&$body - zawartosc pomiedzy tagami list
&$closeNode - tag zamykajacy
$settings - ustawienia parsera

Na podstawie tablicy body wiesz co wpisał użytkownik. Przejrzyj ją a będziesz już wiedział co dalej z tym zrobić smile.gif

Napisany przez: tog 4.01.2010, 20:18:43

mi sie podoba, sprobuje poczytac Twoj kod i sie czegos nauczyc... co by nie byc lama^^

plus ode mnie ;-)

E: nie moge dac plusa w nie swoim temacie biggrin.gif
nie wazne...

Napisany przez: Zdunek 11.01.2010, 14:04:44

Witam, znalazłem następny błąd
tekst z tego artykułu
http://osnews.pl/zapowiedz-swiata-post-nielegalnej-kopii/
i zdaje mi się że przez => ucina 1/3 tekstu po przerzuceniu tekstu przez parser

PS: Kod kopiowałem jako mirror bo strona padła jak ktoś wrzucił na wykop

Napisany przez: wookieb 12.01.2010, 10:26:09

Hmm nie zauważyłem takiej przypadłości. Mógłbyś wrzucić dokładny tekst jaki podałeś parserowi? (wklej.org badz wystawić gdzieś na serwerze )

Napisany przez: Zdunek 12.01.2010, 20:31:33

http://wklejasz.pl/t.txt (plik kodowany w utf-8)
i jak wrzuciłem zamiast > odpowiednik w kodzie, to nie ucięło tekstu

Napisany przez: wookieb 12.01.2010, 20:49:31

Niestety u mnie sytuacja nadal nie występuje.
O ile pamiętam, modyfikowałeś parser, więc polecałbym pobrać parser jeszcze raz i porównać różnice pomiędzy plikami (np total commanderem -> Porównaj według zawartości), może umknęło Ci parę ważnych elementów. Jeżeli pomimo tego problem nadal wystąpi wyrzuć proszę swój parser gdzieś publicznie lub zagadaj na pw w celu wysłania swojego parsera.

Napisany przez: Kamil Pietrzak 30.01.2010, 13:49:36

czekaj... czekaj
nie wiem czemu myslalem, ze parser jest zgodny z xhtml i uzywa np. <span style="weight: bold;"></span> zamiast <b></b>
w kazdym razie tak nie jest... co prawda uzywam htmla a nie xhtmla, ale jeszcze jakis czas temu szukalem parsera do xhtmla, w sumie to bez tego caly parser jest neiwiele warty, bo mozna sobie na szybko napisac niewiele gorszy, a plikow ma tyle co polowa cmsa

Napisany przez: Crozin 30.01.2010, 14:45:42

1) Element B istnieje w XHTMLu
2) Dalece bardziej poprawnym jest użycie

Kod
<b>test</b>
, niż
Kod
<span style="font-wieght: bold">test</span>
.
3) Co ma ilość plików do samego parsera?

(Samego parsera nie oceniam, bo nigdy go nawet na oczy nie widziałem).

Napisany przez: wookieb 30.01.2010, 19:20:38

Cytat(Kamil Pietrzak @ 30.01.2010, 13:49:36 ) *
czekaj... czekaj
nie wiem czemu myslalem, ze parser jest zgodny z xhtml i uzywa np. <span style="weight: bold;"></span> zamiast <b></b>
w kazdym razie tak nie jest... co prawda uzywam htmla a nie xhtmla, ale jeszcze jakis czas temu szukalem parsera do xhtmla, w sumie to bez tego caly parser jest neiwiele warty, bo mozna sobie na szybko napisac niewiele gorszy, a plikow ma tyle co polowa cmsa

To napisz. Ocenimy. Stwórz konkurencję to będziemy gadać.
A sprawdź czy
Kod
<span style="weight: bold"></span>

jest NIE poprawne a dopiero potem gadaj.

Jeżeli piszesz cmsa na 10 plikach to dobrze, ciesz się ale jeżeli nie znasz się na wydajnym organizowaniu struktury plików, obiektów i celu dla jakiego to zorganizowałem (a z tego co widzę to nie znasz się) to się nie wypowiadaj, albo jak już zapytaj. Rozumiem opinie negatywne ale ta jest zupełnie bezpodstawna. Dodatkowo zadziwię cię. Możesz zmienić męczący cię kod na B, I, U, LI. BA! Nawet możesz sobie zamienić na "MOJ_TAG_POGRUBIENIA_KTOREGO_UZYWAM_W_XML_A_NASTEPNIE_TRANSFORMUJE_ZA_POMOCA
_XSLT".

Cytat(Crozin @ 30.01.2010, 14:45:42 ) *
1) Element B istnieje w XHTMLu
2) Dalece bardziej poprawnym jest użycie
Kod
<b>test</b>
, niż
Kod
<span style="font-weight: bold">test</span>


http://webdesign.about.com/od/htmltags/p/bltags_b.htm

Cytat
If you can't use the <strong> element, then you should consider using the CSS http://webdesign.about.com/od/styleproperties/p/blspfontweight.htm property.


Sprawdźcie czy jest poprawne
  1. <!DOCTYPE html
  2. PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  3. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  4. <http://december.com/html/4/element/html.html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  5. <http://december.com/html/4/element/head.html>
  6. <http://december.com/html/4/element/meta.html http-equiv="Content-type" content="application/xhtml+xml; charset=iso-8859-2" />
  7. <http://december.com/html/4/element/title.html>Tytuł</http://december.com/html/4/element/title.html>
  8. <http://december.com/html/4/element/link.html rel="stylesheet" href=" [nazwa_arkusza_stylow.css] " type="text/css" />
  9. </http://december.com/html/4/element/head.html>
  10. <http://december.com/html/4/element/body.html>
  11. <http://december.com/html/4/element/p.html>
  12. <http://december.com/html/4/element/span.html style="font-weight: bold">pogrubiony tekst</http://december.com/html/4/element/span.html>
  13. </http://december.com/html/4/element/p.html>
  14.  
  15. </http://december.com/html/4/element/body.html>
  16. </http://december.com/html/4/element/html.html>
  17.  

Semantycznie nie jest, aczkolwiek validator kod przepuszcza.

Napisany przez: Kamil Pietrzak 4.02.2010, 20:37:06

jestem za bardzo pro zeby pisac byle BB biggrin.gif
szukalem np. takiego parsera ktory jest w wbb3, gdzie calosc jest formatowana css i sie nie gryzie
ale chyba nie ma co
z reszta, zaczalem dzisiaj czytac joomle, to co tam zobaczylem przeroslo moje wyobrazenia o duzych aplikacjach
to jest jakis kombajn, moze troche przesadzam z tym ograniczaniem aplikacji

Napisany przez: GyniO 14.02.2010, 09:39:29

Czy istnieje możliwość do pisania w wartości title, a w obrazkach alt??

Zależało by mi na tym, jest to możliwe?

Napisany przez: wookieb 14.02.2010, 09:43:37

Oczywiście, że jest i oczywiście, że wszystko jest opisane w readme

Napisany przez: kallosz 14.02.2010, 10:17:43

Cytat(GyniO @ 14.02.2010, 09:39:29 ) *
Czy istnieje możliwość do pisania w
Kod
<a href="http://" target="_blank"></a>
wartości title, a w obrazkach alt??

Zależało by mi na tym, jest to możliwe?

wystarczy przeczytać readme <- sama nazwa pliku mówi żeby przeczytać ;]

Poza tym jak przejrzysz kod klasy to również możesz twierdzić czy idzie dopisać

Napisany przez: GyniO 14.02.2010, 10:42:43

No fakt, za readme wziąłem inny plik i stąd moja niewiedza.

Już sobie z tym poradziłem.
Dzięki.

Napisany przez: lobopol 13.03.2010, 14:45:24

A ja mam taki problem
mam aktualnie taki układ plików:
Main:
-class:
--Bbcode:
---pliki tej klasy

--klasa1.php
--klasa2.php

-index.php

i mój problem wygląda w ten sposób, że po skopiowaniu zawartości pliku test.php (z paczki bbcode) do index.php i zaincludowaniu klasy bbcode w ten sposób: include_once ('class/Bbcode/BbCode.class.php');
Dostaję kupę błędów:

  1. Warning: include_once(Bbcode/Filters/Basic.php) [function.include-once]: failed to open stream: No such http://www.php.net/file or directory in C:\xampp\htdocs\smarty\class\Bbcode\BbCode.class.php on line 264
  2.  
  3. Warning: include_once() [function.include]: Failed opening 'Bbcode/Filters/Basic.php' for inclusion (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\smarty\class\Bbcode\BbCode.class.php on line 264
  4.  
  5. Notice: filter not exists in C:\xampp\htdocs\smarty\class\Bbcode\BbCode.class.php on line 268
  6.  
  7. Warning: include_once(Bbcode/Filters/Code.php) [function.include-once]: failed to open stream: No such http://www.php.net/file or directory in C:\xampp\htdocs\smarty\class\Bbcode\BbCode.class.php on line 264
  8.  
  9. Warning: include_once() [function.include]: Failed opening 'Bbcode/Filters/Code.php' for inclusion (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\smarty\class\Bbcode\BbCode.class.php on line 264
  10.  
  11. Notice: filter not exists in C:\xampp\htdocs\smarty\class\Bbcode\BbCode.class.php on line 268
  12.  
  13. Warning: include_once(Bbcode/Filters/Url.php) [function.include-once]: failed to open stream: No such http://www.php.net/file or directory in C:\xampp\htdocs\smarty\class\Bbcode\BbCode.class.php on line 264
  14.  
  15. Warning: include_once() [function.include]: Failed opening 'Bbcode/Filters/Url.php' for inclusion (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\smarty\class\Bbcode\BbCode.class.php on line 264
  16.  
  17. Notice: filter not exists in C:\xampp\htdocs\smarty\class\Bbcode\BbCode.class.php on line 268
  18.  
  19. Warning: include_once(Bbcode/Filters/List.php) [function.include-once]: failed to open stream: No such http://www.php.net/file or directory in C:\xampp\htdocs\smarty\class\Bbcode\BbCode.class.php on line 264
  20.  
  21. Warning: include_once() [function.include]: Failed opening 'Bbcode/Filters/List.php' for inclusion (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\smarty\class\Bbcode\BbCode.class.php on line 264
  22.  
  23. Notice: filter not exists in C:\xampp\htdocs\smarty\class\Bbcode\BbCode.class.php on line 268
  24.  
  25. Warning: include_once(Bbcode/Filters/Image.php) [function.include-once]: failed to open stream: No such http://www.php.net/file or directory in C:\xampp\htdocs\smarty\class\Bbcode\BbCode.class.php on line 264
  26.  
  27. Warning: include_once() [function.include]: Failed opening 'Bbcode/Filters/Image.php' for inclusion (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\smarty\class\Bbcode\BbCode.class.php on line 264
  28.  
  29. Notice: filter not exists in C:\xampp\htdocs\smarty\class\Bbcode\BbCode.class.php on line 268
  30.  
  31. Warning: include_once(Bbcode/Filters/Youtube.php) [function.include-once]: failed to open stream: No such http://www.php.net/file or directory in C:\xampp\htdocs\smarty\class\Bbcode\BbCode.class.php on line 264
  32.  
  33. Warning: include_once() [function.include]: Failed opening 'Bbcode/Filters/Youtube.php' for inclusion (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\smarty\class\Bbcode\BbCode.class.php on line 264

Ale gdy wrzucę index.php do katalogu class wszystko działa, co robię źle?

Ps. dołączenie innego pliku z katalogu bbcode np. include_once 'class/Bbcode/asd.php'; działa dobrze, chmody są ustawione na 777 i nie ma żadnych dodatkowych zabezpieczeń

Napisany przez: wookieb 13.03.2010, 14:51:44

masz 2 wyjścia
1) dodać do include path katalog "class",
2) poprawić wszędzie ścieżkę dołączanych plików na poprzedzając ją 'class/'

Napisany przez: lobopol 13.03.2010, 15:02:35

Wielkie dzięki już wszystko dobrze działa.

Napisany przez: kenobi13 17.03.2010, 18:24:53

Zauważyłem drobny błąd chyba.
W linijce 51 w pliku youtube.php jest:

  1. $idMovie = http://www.php.net/htmlspecialchars($str);

a powinno być:
  1. $idMovie = http://www.php.net/htmlspecialchars($bodyStr);


Czemu jak mam tag CODE to cdy dam do środka kolejny taki tak pokauje mi się okienko na kod i w nim drugie?

Napisany przez: LapKom 21.03.2010, 21:28:24

Czy jest mozliwość usprawnienia biblioteki/filtru w taki sposób, żeby wyłapywał niedomknięte tagi? Chodzi mi o napisanie filtra do obsługi innego typu listy, takiej jak na przykład na tym forum.

Kod
[list=1]
[*] pozycja 1
[*] pozycja 2
[*] pozycja 3
[/list]

Listę otwiera tag list, domyślnie jest to ul, ale jeśli podamy parametr w postaci liczby, to zamienia sie w ol i rozpoczyna odliczanie od podanej liczby. Każda pozycja w liście to tag *. Bardzo często spotyka się listy własnie w takim formacie BBCode.

Napisany przez: wookieb 21.03.2010, 22:18:32

Cytat(kenobi13 @ 17.03.2010, 18:24:53 ) *
Zauważyłem drobny błąd chyba.
W linijce 51 w pliku youtube.php jest:
  1. $idMovie = http://www.php.net/htmlspecialchars($str);

a powinno być:
  1. $idMovie = http://www.php.net/htmlspecialchars($bodyStr);

Faktycznie zgadza się. Niedługo to poprawię.
Cytat(kenobi13 @ 17.03.2010, 18:24:53 ) *
Czemu jak mam tag CODE to cdy dam do środka kolejny taki tak pokauje mi się okienko na kod i w nim drugie?

Takie było założenie. Narazie je zostawiam w takiej formie, dopóki dokładniej tego nie przemyślę.


Cytat
Czy jest mozliwość usprawnienia biblioteki/filtru w taki sposób, żeby wyłapywał niedomknięte tagi? Chodzi mi o napisanie filtra do obsługi innego typu listy, takiej jak na przykład na tym forum.

Posługiwałem się "standardem" z http://bbcode.org/reference.php
Aczkolwiek, nie ma problemu by sobie napisać tak działającą listę. Odpowiednie zaprogramowanie funkcji parsującej listę i jest.

Napisany przez: LapKom 22.03.2010, 20:47:49

A w jaki sposób mogę użyć asterixa w nazwie taga? Skrypt nie parsuje tagu [ * ], natomiast bez problemu działa na innych [tagbb] ze znakami alfanumerycznymi. Dodatkowo gdzie w ustawieniach mogę zmienić, aby tab zamykający [/*] nie był wymagany? Próbowałem obejść to i przy parsowaniu całej listy (to udało mi się szybko zrobić) wywołać:

Kod
$body[0]['text'] = preg_replace('/\[\*\](.*)/i','<li>$1</li>',$body[0]['text']);

Niestety po utworzeniu wynikowego html, po var_dump() dostaję wynik przepuszczony przez htmlspecialchars(). Nie mogłem namierzyć, gdzie się to filtrowanie odbywa. Można to w przypadku takiego taga wyłączyć? Może istnieje jakiś natywny sposób na parsowanie elementów listy w takim formacie?


Dodatkowo do basic filtra proponuję dołączyć tagi [ left], [ center] i [ right] do wyrównania tekstu. Sam sobie dopisałem i są przydatne. smile.gif

Napisany przez: wookieb 22.03.2010, 23:47:15

Cytat(kenobi13 @ 17.03.2010, 18:24:53 ) *
Czemu jak mam tag CODE to cdy dam do środka kolejny taki tak pokauje mi się okienko na kod i w nim drugie?

A jednak duża ilość opcji się przydaje smile.gif
Wystarczy, że do taga code dodasz podane ustawienia:
  1. 'notallowed_parent'=>array('code'), // uniemozliwia osadzenie code
  2. 'leave_notallowed_parent'=>true // ale samo istnienie tegoż taga pozostawia w tekście



Co do "gwiazdkowej" listy smile.gif
Mała pomoc:
  1.  
  2. public $tags=http://www.php.net/array(
  3. 'list'=>array(
  4. 'open'=>'ul',
  5. 'close'=>'ul',
  6. 'wrap_white_space'=>true,
  7. 'allowed_child'=>array('*'),
  8. 'notallowed_parent'=>array('list'),
  9. 'parse_body'=>'parseList'
  10. ),
  11. '*'=>array(
  12. 'open'=>'li',
  13. 'close'=>false
  14. )
  15. );

Odprogramuj tylko metodę parseList.
Przejrzyj zawartość tagu otwierającego i możesz przykładowo spojrzeć na filtr Image, która pokazuje co można zrobić z tagiem/mi.

Napisany przez: LapKom 23.03.2010, 01:03:17

  1. <?php
  2.  
  3. /**
  4.  * Obsługa list (popularna na forach)
  5.  * @package Parser
  6.  * @subpackage Filters
  7.  * @author LapKom
  8.  * @version 0.1
  9.  */
  10. class BbCodeFilterList
  11. {
  12. public $tags=http://www.php.net/array(
  13. 'list'=>array(
  14. 'open'=>'ul',
  15. 'close'=>'ul',
  16. 'wrap_white_space'=>true,
  17. 'allowed_child'=>array('*','l'),
  18. 'notallowed_parent'=>array('list'),
  19. 'parse_body'=>'parseList',
  20. 'attributes'=>array(
  21. 'list'=>array(
  22. 'attr'=>'style',
  23. 'type'=>'string',
  24. 'values'=>array(
  25. '1',
  26. '01',
  27. 'a',
  28. 'A',
  29. 'i',
  30. 'I',
  31. ),
  32. ),
  33. ),
  34. ),
  35. '*'=>array(
  36. 'open'=>'li',
  37. 'close'=>false,
  38. 'allowed_parent'=>array('list'),
  39. ),
  40. );
  41.  
  42. /**
  43. * Parsuje LISTY
  44. * @param array $tag
  45. * @param array $openNode
  46. * @param array $body
  47. * @param array $closeNode
  48. * @param BbCodeSettings $settings
  49. */
  50. public function parseList($tag, &$openNode, &$body, &$closeNode, $settings)
  51. {
  52. if(http://www.php.net/isset($openNode['attributes']['tag_attributes']['list'])) {
  53. $listStyleType = $openNode['attributes']['tag_attributes']['list'];
  54. switch ($listStyleType) {
  55. case '1' : $type = 'decimal'; break;
  56. case '01' : $type = 'decimal-leading-zero'; break;
  57. case 'a' : $type = 'lower-alpha'; break;
  58. case 'A' : $type = 'upper-alpha'; break;
  59. case 'i' : $type = 'lower-roman'; break;
  60. case 'I' : $type = 'upper-roman'; break;
  61. }
  62. $listStyleType = $openNode['attributes']['tag_attributes']['list'] = 'list-style-type:'.$type;
  63. $openNode=BbCode::rebuildNode($tag, $openNode, $settings);
  64. $openNode['text'] = http://www.php.net/str_replace('ul','ol',$openNode['text']);
  65. $closeNode['text'] = http://www.php.net/str_replace('ul','ol',$closeNode['text']);
  66. }
  67. }
  68. }
  69.  
  70. ?>

Na szybko napisałem taki filtr, ale gwiazdki z nic nie mogę zmusić do współpracy. sad.gif Gdy zamiast * podam cokolwiek innego w nazwie taga, parser działa bez problemów np.:
  1. 'l'=>array(
  2. 'open'=>'li',
  3. 'close'=>false,
  4. 'allowed_parent'=>array('list'),
  5. )

W przypadku gwiazdki tag nie jest w ogóle parsowany i dostaje go surowej postaci. Czy ja coś źle ustawiam, że dla 'l' dziala, a dla '*' nie, czy to może jakiś bug parsera? Jeszcze muszę dopisać samo przetwarzanie takich tagów, bo według tego co napisałeś generowany html jest w postaci '<li/> Jakiś tekst', a parser traktuje samodomknięty tag i tekst jako 2 osobne pola w tablicy elementów. Dla kodu:
  1. foreach($body as &$el) {
  2. http://www.php.net/var_dump($el);
  3. }

Dostaję wynik w postaci:
  1. http://www.php.net/array
  2. 'type' => int 0
  3. 'text' => string '
  4.  
  5. ' (length=4)
  6. 'nobr' => int 1
  7.  
  8. http://www.php.net/array
  9. 'type' => int 3
  10. 'original_text' => string '[l]' (length=3)
  11. 'tagname' => string 'l' (length=1)
  12. 'tagText' => string '[l]' (length=3)
  13. 'text' => string '<li/>' (length=5)
  14.  
  15. http://www.php.net/array
  16. 'type' => int 0
  17. 'text' => string ' Element listy
  18.  
  19. ' (length=18)
  20. 'nobr' => int 1
  21.  
  22. http://www.php.net/array
  23. 'type' => int 3
  24. 'original_text' => string '[l]' (length=3)
  25. 'tagname' => string 'l' (length=1)
  26. 'tagText' => string '[l]' (length=3)
  27. 'text' => string '<li/>' (length=5)
  28.  
  29. http://www.php.net/array
  30. 'type' => int 0
  31. 'text' => string ' Element listy 2
  32.  
  33. ' (length=19)
  34. 'nobr' => int 1

Jakaś wskazówka na skutecznego fixa? smile.gif

Napisany przez: wookieb 23.03.2010, 08:37:49

Ściągnij parser i skopiuj plik BbCode.class.php . Wczoraj to zrobiłem, poniewaz faktycznie parser blokował tego typu tagi.

Napisany przez: GyniO 16.05.2010, 15:18:11

Mam problem z funkcją do skracania.

Przy skracaniu [ul][li][/li][ul] powinno brać cały [li][/li], domknąć [ul] a dopiero wtedy dopisać "...".

BBcode:

Cytat
[ul]
[li]Internet Explorer,[/li]
[li]Firefox,[/li]
[li]Google Chrome 4.0,[/li]
[li]Safari 3.0.[/li]
[/ul]


W chwili obecnej OPT się wysypuje:
  1. <http://december.com/html/4/element/p.html>
  2. tresc
  3. <http://december.com/html/4/element/ul.html>
  4. <http://december.com/html/4/element/li.html>Internet Explorer,</http://december.com/html/4/element/li.html>
  5. <http://december.com/html/4/element/li.html>Firefox 3.0,</http://december.com/html/4/element/li.html>...</http://december.com/html/4/element/li.html>
  6. </http://december.com/html/4/element/ul.html>
  7. </http://december.com/html/4/element/p.html>

Napisany przez: wookieb 16.05.2010, 22:34:46

Problem poprawiony i nowa paczka jest na serwerze. Plik BbCode.class.php do zmiany

Napisany przez: redelek 25.05.2010, 10:31:34

Witam,

Ostatnio kolega @wookieb podał mi kod do swojej klasy bbcode.
Wszystko działa prawie super smile.gif Chodzi o wprowadzenie kolorowania w geshi
Zrobiłem to tak

  1. <?php
  2.  
  3. include_once('Bbcode/BbCode.class.php');
  4. $bb=new BbCode();
  5. $text='POGROBIONE
  6.  
  7. /*oczywiście tu wpisuję znacznki [php] tylko na forum się to rozwal*/
  8. if ($ddd == "aaa") {
  9. echo "bbb";
  10. }
  11. /*
a tu go zamykam*/
';
echo '<fieldset class="pre"><legend>Oryginalny tekst</legend>'.$text.'</fieldset>';
$bb->parse($text, false);
echo '<fieldset><legend>Po BBC</legend'.$bb->getHtml().'</fieldset>';


?>[/php]

Znalazłem w klasie code.php odblokowanie funkcji GESHI. Niestety pomimo usilnych starań nie koloruje mi składni sad.gif
Czy może ktoś mi pomoc ?

Dzięki

Napisany przez: wookieb 25.05.2010, 10:40:23

Było
http://forum.php.pl/index.php?act=findpost&hl=geshi&pid=684713

Następnym razem poruszaj takie sprawy w temacie dotyczącym tego skryptu bo robi się bałagan na forum
// EDIT: Dziękuję za połączenie tematów smile.gif

Napisany przez: redelek 25.05.2010, 11:12:51

oki tego nie widziałem

Ale jak zrobiłem zmiany z code.php

  1. <?php
  2.  
  3. /**
  4.  * Tag CODE
  5.  * @package Parser
  6.  * @subpackage Filters
  7.  * @author wookieb
  8.  * @version 1.1
  9.  */
  10. class BbCodeFilterCode
  11. {
  12. public $tags=http://www.php.net/array(
  13. 'code'=>array(
  14. 'open'=>'div class="code_wrapper"',
  15. 'close'=>'div',
  16. 'notallowed_child'=>'all',
  17. 'leave_notallowed_child'=>1,
  18. 'leave_notallowed_parent'=>1,
  19. 'parse_body'=>'parseCode'
  20. )
  21. );
  22.  
  23. /**
  24. * Parsuje tag CODE
  25. * @param array $tag
  26. * @param array $openNode
  27. * @param array $body
  28. * @param array $closeNode
  29. */
  30. /*public function parseCode($tag, &$openNode, &$body, &$closeNode)
  31. {
  32. // tutaj mozemy dodać geshi czy to tez sie podoba
  33. $openNode['text'].='<div class="code_title">Kod</div><div class="code_area">';
  34. $closeNode['text']='</div>'.$closeNode['text'];
  35.  
  36. }
  37.  
  38. */
  39. /**
  40. * Parsuje tag CODE używając GESHI
  41. * @param array $tag
  42. * @param array $openNode
  43. * @param array $body
  44. * @param array $closeNode
  45. */
  46.  
  47. public $tag=http://www.php.net/array(
  48. 'php'=>array(
  49. 'open'=>'div class="code_wrapper"',
  50. 'close'=>'div',
  51. 'notallowed_child'=>'all',
  52. 'leave_notallowed_child'=>1,
  53. 'leave_notallowed_parent'=>1,
  54. 'parse_body'=>'parsePHP'
  55. ),
  56. 'code'=>array(
  57. 'open'=>'div class="code_wrapper"',
  58. 'close'=>'div',
  59. 'notallowed_child'=>'all',
  60. 'leave_notallowed_child'=>1,
  61. 'leave_notallowed_parent'=>1,
  62. 'parse_body'=>'parseCode'
  63. )
  64. );
  65.  
  66. public function parsePhp($tag, &$openNode, &$body, &$closeNode)
  67. {
  68. $language = 'php';
  69. $this->parseCode($tag, $openNode, $body, $closeNode, 'php');
  70. }
  71.  
  72.  
  73. public function parseCode($tag, &$openNode, &$body, &$closeNode, $language = 'default')
  74. {
  75. // laczymy tresc w całość
  76.  
  77. $content = '';
  78. foreach($body as $key => &$node)
  79. {
  80. $content.= $node['text'];
  81. $node['text'] = '';
  82.  
  83. // usuwamy zbedne elementy
  84. if($key!=0) http://www.php.net/unset($body[$key]);
  85. }
  86.  
  87. require_once 'class.geshi.php';
  88.  
  89.  
  90. $geshi = new GeSHi($content, $language);
  91. $body[0]['tagText'] = $content;
  92. $body[0]['text'] = $geshi->parseCode();
  93. $body[0]['nohtmlspecialchars'] = 1;
  94.  
  95. $openNode['text'].='<div class="code_title">Kod</div><div class="code_area">';
  96. $closeNode['text']='</div>'.$closeNode['text'];
  97. }
  98.  
  99.  
  100. }


To wywala mi taki błąd
Catchable fatal error: Object of class BbCodeSettings could not be converted to string in D:\www\TESTY-MODULOW\geshi_testy\geshi\geshi.php on line 667

Przepraszam, ale czarna magia dla mnie. Chodzi mi o to że jak w tekscie znajdzie [code lanh='php'] [/code] to pokoloruje to.


Napisany przez: wookieb 25.05.2010, 11:30:07

A no tak bo zmienił się parser

  1. public function parseCode($tag, &$openNode, &$body, &$closeNode, $settings, $language = 'default')

Oraz
  1.  
  2. public function parsePhp($tag, &$openNode, &$body, &$closeNode, $settings)
  3. {
  4. $language = 'php';
  5. $this->parseCode($tag, $openNode, $body, $closeNode, $settings, 'php');
  6. }

Powinno być ok

Jeżeli chcesz obsłużyć parametr lang to czytaj readme no i przejrzyj w funkcji zawartość zmiennej $openNode
  1. http://www.php.net/print_r($openNode);

Żebyś wiedział, skąd wyciągnać wartość atrybutu

Napisany przez: redelek 25.05.2010, 13:24:25

Poprawiłem i teraz mi wyświetla
Fatal error: Call to undefined method GeSHi::parseCode() in D:\www\TESTY-MODULOW\geshi_testy\Bbcode\Filters\Code.php on line 94

a ta linijka to

  1. $body[0]['text'] = $geshi->parseCode();



Napisany przez: wookieb 25.05.2010, 13:28:04

To w takim razie sprawdź jaka funkcja przeparsuje code w geshi, bo juz nie pamietam, może miałem inna wersje. Ale generalnie wiesz o co chodzi.

Napisany przez: redelek 26.05.2010, 09:27:14

Witam,

Już doszedłem prawie gdzie był problem. W Geshi zostało zmienione parseCode() na parse_code() i już działa to znaczy nie wyświetla błędu.
Niestety kod nie jest pokolorowany jest wyświetlony jako default
Code.php

  1. <?php
  2.  
  3. /**
  4.  * Tag CODE
  5.  * @package Parser
  6.  * @subpackage Filters
  7.  * @author wookieb
  8.  * @version 1.1
  9.  */
  10. class BbCodeFilterCode
  11. {
  12. public $tags=http://www.php.net/array(
  13. 'code'=>array(
  14. 'open'=>'div class="code_wrapper"',
  15. 'close'=>'div',
  16. 'notallowed_child'=>'all',
  17. 'leave_notallowed_child'=>1,
  18. 'leave_notallowed_parent'=>1,
  19. 'parse_body'=>'parseCode'
  20. )
  21. );
  22.  
  23. /**
  24. * Parsuje tag CODE
  25. * @param array $tag
  26. * @param array $openNode
  27. * @param array $body
  28. * @param array $closeNode
  29. */
  30. /*public function parseCode($tag, &$openNode, &$body, &$closeNode)
  31. {
  32. // tutaj mozemy dodać geshi czy to tez sie podoba
  33. $openNode['text'].='<div class="code_title">Kod</div><div class="code_area">';
  34. $closeNode['text']='</div>'.$closeNode['text'];
  35.  
  36. }
  37.  
  38. */
  39. /**
  40. * Parsuje tag CODE używając GESHI
  41. * @param array $tag
  42. * @param array $openNode
  43. * @param array $body
  44. * @param array $closeNode
  45. */
  46.  
  47. public $tag=http://www.php.net/array(
  48. 'php'=>array(
  49. 'open'=>'div class="code_wrapper"',
  50. 'close'=>'div',
  51. 'notallowed_child'=>'all',
  52. 'leave_notallowed_child'=>1,
  53. 'leave_notallowed_parent'=>1,
  54. 'parse_body'=>'parsePHP'
  55. ),
  56. 'code'=>array(
  57. 'open'=>'div class="code_wrapper"',
  58. 'close'=>'div',
  59. 'notallowed_child'=>'all',
  60. 'leave_notallowed_child'=>1,
  61. 'leave_notallowed_parent'=>1,
  62. 'parse_body'=>'parseCode'
  63. )
  64. );
  65.  
  66. public function parsePhp($tag, &$openNode, &$body, &$closeNode, $settings)
  67. {
  68. $language = 'php';
  69. $this->parseCode($tag, $openNode, $body, $closeNode, $settings, 'php');
  70. }
  71.  
  72.  
  73.  
  74. public function parseCode($tag, &$openNode, &$body, &$closeNode, $settings, $language = 'default')
  75.  
  76. {
  77. // laczymy tresc w całość
  78. http://www.php.net/print_r($openNode);
  79. $content = '';
  80. foreach($body as $key => &$node)
  81. {
  82. $content.= $node['text'];
  83. $node['text'] = '';
  84.  
  85. // usuwamy zbedne elementy
  86. if($key!=0) http://www.php.net/unset($body[$key]);
  87. }
  88.  
  89. require_once 'geshi/geshi.php';
  90.  
  91.  
  92. $geshi = new GeSHi($content, $language);
  93. $body[0]['tagText'] = $content;
  94. $body[0]['text'] = $geshi->parse_code();
  95. $body[0]['nohtmlspecialchars'] = 1;
  96.  
  97. $openNode['text'].='<div class="code_title">Kod</div><div class="code_area">';
  98. $closeNode['text']='</div>'.$closeNode['text'];
  99.  
  100.  
  101. }
  102.  
  103.  
  104. }


i zniknieła zmienna użyta w przykładowym skrypcie php
  1. <?php
  2.  
  3. include_once('Bbcode/BbCode.class.php');
  4. $bb=new BbCode();
  5.  
  6.  
  7. $text="POGROBIONE
  8. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1--> if ( $ddd == 'aaa') {
  9.     echo 'pupa';
  10.     }<!--c2--></div><!--ec2-->";
  11. http://www.php.net/echo '<fieldset class="pre"><legend>Oryginalny tekst</legend>'.$text.'</fieldset>';
  12. $bb->parse($text, false);
  13. http://www.php.net/echo '<fieldset><legend>Po BBC</legend'.$bb->getHtml().'</fieldset>';
  14.  
  15.  
  16. ?>


Mogę prosić o pomoc lub naprowadzenie ?

Napisany przez: wookieb 26.05.2010, 09:44:55

A gdzie ty masz tag "code" uzyty?
Poza tym pisałem, przeczytaj readme.html jak się dodaje parametry do tagów

Napisany przez: redelek 26.05.2010, 10:06:39

to forum wycieło znaczniki code.
Kurcze no mam te tagi dopisane

  1. public $tag=http://www.php.net/array(
  2. 'php'=>array(
  3. 'open'=>'div class="code_wrapper"',
  4. 'close'=>'div',
  5. 'notallowed_child'=>'all',
  6. 'leave_notallowed_child'=>1,
  7. 'leave_notallowed_parent'=>1,
  8. 'parse_body'=>'parsePhp'
  9. ),
  10. 'code'=>array(
  11. 'open'=>'div class="code_wrapper"',
  12. 'close'=>'div',
  13. 'notallowed_child'=>'all',
  14. 'leave_notallowed_child'=>1,
  15. 'leave_notallowed_parent'=>1,
  16. 'parse_body'=>'parseCode'
  17. )
  18. );

Napisany przez: wookieb 26.05.2010, 10:17:00

Przecież cały czas mówię o dodaniu atrybutu LANG do tagu CODE.

Napisany przez: redelek 26.05.2010, 11:26:51

Dodałem atrybut

  1. public $tag=http://www.php.net/array(
  2. 'php'=>array(
  3. 'open'=>'div class="code_wrapper"',
  4. 'close'=>'div',
  5. 'notallowed_child'=>'all',
  6. 'leave_notallowed_child'=>1,
  7. 'leave_notallowed_parent'=>1,
  8. 'parse_body'=>'parsePhp'
  9. ),
  10. 'code'=>array(
  11. 'open'=>'div class="code_wrapper"',
  12. 'close'=>'div',
  13. 'notallowed_child'=>'all',
  14. 'leave_notallowed_child'=>1,
  15. 'leave_notallowed_parent'=>1,
  16. 'attributes'=>array('lang'=>array('attr'=>'lang')),
  17. 'parse_body'=>'parseCode'
  18. )
  19. );

i ndal nie koloruje sad.gif
w kodzie mam [code lang="php"]

Napisany przez: wookieb 26.05.2010, 11:29:47

Przeczytaj jeszcze raz moje posty.
napisałem:
DODAJ ATRYBUT
+
SPRAWDŹ W KODZIE JAK TEN ATRYBUT PRZEKAZAĆ DO GESHI

Napisany przez: redelek 26.05.2010, 12:32:28

A może mi Pan pomóc,

Kurcze nie jestem taki mocy w PHP i ślęczę nad tym od dwóch dni i nic ciekawego wymodzić nie mogę.
Tak kiepski jestem wiem. Amatorsko się tym zajmuję na potrzeby zabawy i wolnego czasu.
Proszę o wyrozumiałość, potrzebne mi jest to do moich skryptów z języka bash

Napisany przez: GyniO 23.06.2010, 13:44:34

Mam jeszcze tylko 1 pytanie, w którym miejscu mogę zrobić parsowanie emotów? tzn ": )" na smile.gif ?

---------------------------------------------------------------------------------------------------------------

Ok, udało mi się podłączyć Geshi do Tego parsera, nie miałem żadnych większych problemów ;]

Ale mam pewien problem z wyświetlaniem tego, mianowicie na chrome wszystko działa:
http://gynio.pl/artykul/8-geshi-dodatek-do-parsera-BBcode/

A na Mozilli wywala błąd XML

  1. Błąd parsowania XML: niezdefiniowana jednostka
  2. Obszar: <http://december.com/html/4/element/a.html href="http://gynio.pl/artykul/8-geshi-dodatek-do-parsera-BBcode/" target="_blank">http://gynio.pl/artykul/8-geshi-dodatek-do-parsera-BBcode/</http://december.com/html/4/element/a.html>
  3. Numer linii: 77, kolumna 131:<http://december.com/html/4/element/div.html class="code_wrapper"><http://december.com/html/4/element/div.html class="code_title">Kod</http://december.com/html/4/element/div.html><http://december.com/html/4/element/div.html class="code_area"><http://december.com/html/4/element/pre.html class="php" style="font-family:monospace;">&nbsp;


Problem tkwi w  
  1. &nbsp;



Strona to mój "cms" z OPT.

Napisany przez: Crozin 23.06.2010, 13:59:24

Masz, pokalało Cię za używanie twardych spacji do czegoś do czego nie zostały stworzone.

Ale żeby nie było: http://changelog.ca/log/2006/06/12/making_nbsp_work_with_xml_rss_and_atom

Napisany przez: GyniO 23.06.2010, 14:10:04

Ok działa smile.gif

Parser
zamienia \t na 4x nbsp w pliku bbcode.class.php

Napisany przez: athabus 2.07.2010, 13:32:07

Właśnie szukałem czegoś do parsowania bbcodu z możliwością dodania kilku niestandardowych znaczników i natrafiłem na Twoją fajną klasę. Na prawdę niezła robota. Z moich uwag to:
- nie wiem, czy dobrze widzę, ale czy niestandardowe tagi trzeba dopisać "na stałe" do klasy? Jeśli tak to fajnie byłoby dodać jakąś metodę pozwalającą na zmianę w locie - raz mogę potrzebować innego zestawu tagów a drugi raz innego. Fajnie aby takie rzeczy można było zmieniać w kodzie.
- zadeklarowałbym metody jak protected a nie private tak, aby w razie czego można było dziedziczyć po Twojej klasie - znów powód jak powyżej - czasami mogę potrzebować jakiś niestandardowych rozwiązań i zamiast przerabiać całą klasę mógłbym tylko dodać/zmienić pewne części

Najbardziej podoba mi się automatyczne "domykanie" tagów - wiele rozwiązań nie ma tego zaimplementowanego a jest to przydatna funkcja.

Ogólnie dobra robota - gratuluje.

Napisany przez: wookieb 3.07.2010, 07:28:30

Cytat(athabus @ 2.07.2010, 14:32:07 ) *
- nie wiem, czy dobrze widzę, ale czy niestandardowe tagi trzeba dopisać "na stałe" do klasy? Jeśli tak to fajnie byłoby dodać jakąś metodę pozwalającą na zmianę w locie - raz mogę potrzebować innego zestawu tagów a drugi raz innego. Fajnie aby takie rzeczy można było zmieniać w kodzie.

To faktycznie mój błąd, że nie zadbałem o możliwośc stworzenia dynamicznych filtrów aczkolwiek klasa jest przygotowana pod szereg przeróżnych kombinacji filtrów, możliwość włączenie wyłączenia poszczególnych tagów (BbCodeSettings)

Cytat(athabus @ 2.07.2010, 14:32:07 ) *
- zadeklarowałbym metody jak protected a nie private tak, aby w razie czego można było dziedziczyć po Twojej klasie - znów powód jak powyżej - czasami mogę potrzebować jakiś niestandardowych rozwiązań i zamiast przerabiać całą klasę mógłbym tylko dodać/zmienić pewne części

Metod prywatnych używa się kiedy chcemy aby użytkownik nie mógł ich nadpisać i bezpośrednio używać z tego m.in względu aby nie zepsuł działania pewnego elementu. Tak więc uznałem, że większość metody parsujące powinny być prywatne, aczkolwiek faktycznie ładowanie filtrów może być chronione i zależne od użytkownika. Jak będę prowadził pracę nad modyfikacjami na pewno to zrobię smile.gif

Napisany przez: Zajec 3.03.2011, 22:08:21

Potrzebuję wymienić parser BBCode i cieszę się że znalazłem coś porządnego smile.gif

Niestety pierwsza próba odpalenia sprawiła kilka kłopotów, otóż postanowiłem wrzucić klasę do odpowiedniego podkatalogu mojego systemu. Wtedy okazało się, że robiąc "require_once 'include/tools/parsers/BbCode.php" wszystko się sypie, ze względu na relatywność ścieżek.

Poprawiłem to prostym znanym trickiem z dirname i __FILE__. Dzielę się swoim patchem, fajnie gdybyś go włączy do swojego "mainline" smile.gif
http://files.zajec.net/bbcode.0001.patch.txt

Napisany przez: wookieb 3.03.2011, 22:11:02

Wystarczy dodać katalog z BbCode do include_path snitch.gif

Napisany przez: Zajec 8.03.2011, 12:57:04

Cytat(wookieb @ 3.03.2011, 22:11:02 ) *
Wystarczy dodać katalog z BbCode do include_path snitch.gif
Pewnie, tylko wyboraź sobie takie include_path ze wszystkimi projektami.
Kod
.;include/tools/parsers/BbCode/;include/tools/parsers/Wiki/;include/tools/PHPTAL/;include/tools/Sblam/
Ogłupiałbym tongue.gif

Poza tym nie chodzi mi o to, abym ja sobie z tym poradził. Uważam projekt za ciekawy i chciałem, aby każdemu nowemu jego użytkownikowi działało to out-of-box.

Napisany przez: gorzat 22.03.2011, 18:33:41

witam, sciagnalem sobie to, ale nie bardzo wiem jak sie teraz do tego zabrac...
mam sobie strony index.php oraz dodaj.php, na tym samym poziomie folder bbcode.
no i co teraz musze zrobic, zebym w formularzu dodaj.php mogl sobie wpisac tekst i ubrac go w bbcode?
dodaje do plikow

  1. include_once('Bbcode/BbCode.class.php');
  2. $bb=new BbCode();


i co dalej? co mam zrobic, zebym mogl wpisac test i mi sie to w index.php wyswietlilo pogrubione?
poza tym wyskakuje mi blad
Kod
Warning: include_once(Bbcode/Filters/Youtube.php) [function.include-once]: failed to open stream: No such file or directory in E:\wamp\test\templates\bbcode\BbCode.class.php on line 264

Warning: include_once() [function.include]: Failed opening 'Bbcode/Filters/Youtube.php' for inclusion (include_path='.;C:\php5\pear') in E:\wamp\test\templates\bbcode\BbCode.class.php on line 264

w php.ini znalazlem i odznaczylem
Cytat
Windows: "\path1;\path2"
include_path = ".;c:\php\includes;E:\wamp\www\test\Bbcode\"

ale to nic nie dalo ;/ prosze o pomoc

Napisany przez: Avatarus 3.04.2011, 13:19:02

a jak zrobić zwykłe prasowanie

Kod
<br />

W smf bbcode i html jest mieszane podczas zapisu.
Dzięki za pomoc

Napisany przez: wookieb 3.04.2011, 13:37:46

Musisz wcześniej zamienić "<br />" na znak nowej linii.

Napisany przez: mlawnik 7.04.2011, 16:21:07

A czy jest możliwość parsowania youtube po samym ID?
@gorzat, użyj patcha Zajeca

Napisany przez: wookieb 7.04.2011, 17:57:57

Tak. W tagu podajesz po prostu tylko jego ID

Napisany przez: mlawnik 10.04.2011, 16:44:28

No ale jak podaje samo id to mi sie wyswietla ramka z youtubem i tekstem, ze not found.
Fakt, uzylem patcha zejeca i zmienilem player na nowy.
Mozesz pomoc?

Moj kod:

github.com/marcinlawnik/BBcode-parser

Napisany przez: wookieb 10.04.2011, 16:51:43

Jestem kretynem. Mój błąd
W pliku Filter/Youtube.php
zamień linijke

  1. $idMovie = http://www.php.net/htmlspecialchars($str);

na
  1. $idMovie = http://www.php.net/htmlspecialchars($bodyStr);

Ja też to potem wrzucę na githuba.

Napisany przez: mlawnik 10.04.2011, 17:20:41

Poprawione.

Zaraz dorzuce twoje przyklady i zrobie diff na twoim oryginale i mojej modyfikacji.

Ew. po prostu zrobisz forka z mojej wersji.

Napisany przez: wookieb 10.04.2011, 17:21:39

Raczej nie forka. I tak będę wydawał nową wersję.

Napisany przez: mlawnik 10.04.2011, 18:00:19

Czekam z nieciepliwością.

EDIT: Dla potomnych:

Zawartosc paczki z pierwszego postu:

https://github.com/marcinlawnik/BBcode-orig

Paczka z pierwszego postu z modyfikacjami:
- patch zajeca
- poprawka w youtube.php taka sama jak w patchu bo zajec ja pominal
- poprawka 2 posty wyzej z $str i $bodyStr

https://github.com/marcinlawnik/BBcode-modified


Napisany przez: nekomata 11.04.2011, 16:45:04

Jedna rzecz , czy parser blokuję html'a i XSS czy to już należy do nas?

Napisany przez: wookieb 11.04.2011, 17:01:35

Sam blokuje.

Napisany przez: nekomata 11.04.2011, 17:12:04

Dzięki , zaoszczędzi mi to trochę włosów na głowie tongue.gif ogólnie świetna sprawa.Myślałeś może o dodaniu tagu "spoiler"?

Napisany przez: wookieb 12.04.2011, 21:10:03

Nie planuje, bo jest to zbyt zależne od widoku.

Napisany przez: nekomata 13.04.2011, 18:41:55

W sumie dzięki takiemu łatwemu do zrozumienia rozpisaniu klasy bardzo łatwo dopisywać tagi. Jakby ktoś chciał tag spoiler z jQuery to ja zrobiłem to tak :
Zaraz po tag'u Quote w pliku Basic.php

  1. ,
  2. 'spoiler'=>array(
  3. 'open'=>'div class="spoiler"><input type="button" value="Spoiler"/><div class="spoiled"',
  4. 'close'=>'div></div'
  5. )
CSS :
  1. .spoiler , .spoiler input {
  2. margin:5px;
  3. border: 1px white dashed;
  4. }
  5. div.spoiler div.spoiled{
  6. display:none;
  7. margin:5px;
  8. }
i w JS
[JAVASCRIPT] pobierz, plaintext
  1. $('.spoiler').children('input').click(function(){
  2. $(this).siblings('.spoiled').toggle();
  3. });
[JAVASCRIPT] pobierz, plaintext
A tak ogólnie mówiąc to ja taki parser bym sprzedawał a nie publikował .. biggrin.gif
EDIT : Pozwoliłem sobie otworzyć tagi spowrotem tongue.gif Ponieważ "domykają" się one w linijce 670,695 i 790 pliku BbCode.class.php tongue.gif

Napisany przez: szczeku 15.04.2011, 13:02:09

Cześć,

Na początek napisze, że świetny parser stworzyłeś.

Ale mam dwie kwestie.

1. Zagnieżdzanie tagów, np:

  1. [b]123[/b]

zamienia na:
  1. <http://december.com/html/4/element/b.html><http://december.com/html/4/element/b.html>123</http://december.com/html/4/element/b.html></http://december.com/html/4/element/b.html>

zamiast na:
  1. <http://december.com/html/4/element/b.html>123</http://december.com/html/4/element/b.html>


pomimo iż w filtrze taga 'b' jest :
  1. 'notallowed_child'=>array('b')


inne tagi usuwa, jeśli się je poda jako niedozwolone

2. Chciałbym zrobić tak, żeby nie domykało tagów np. gdy zapomni się napisać [/quote] , to żeby nie robiło cytowania, teraz cytatem jest objęte wszystko do końca. Czy jest jakiś sposób aby tak się działo (a raczej nie działo smile.gif).

pozdrawiam

Napisany przez: nekomata 16.04.2011, 00:26:33

@mlawnik popraw tag youtube'a dokładnie mam na myśli linijkę 77 , usuń "allowfullscreen" bo w3c validator krzyczy a nic to allowfullscreen niezmienia bo to nie jest embed tylko iframe.

Napisany przez: wookieb 16.04.2011, 10:53:43

1) Tak zajmę się tym
2) Niestety raczej nie ma takiej opcji ale racja muszę o tym pomyśleć.

Napisany przez: mlawnik 17.04.2011, 16:00:19

@nekomata, poprawione.

Napisany przez: evolucja 8.05.2011, 18:12:43

Jak korzystać z tej zajawki? Mam w pętli wyświetlanie newsów. W miejscu na treść dodałem:

  1. $bbcode = new BbCode();
  2. $bbcode->getSettings()->trustText = true;
  3. $bbcode->parse($news['content']);
  4. http://www.php.net/echo $bbcode->cutText(150);

W efekcie otrzymuję kompletnie różnej długości teksty. Jedne mają kilka wyrazów, inne wyświetlają się prawie całe. W zależności od tego jaką liczbę wstawię w cutText to teksty zmieniają swoją długość - jak było kilka zdań to teraz pokazuje się jeden wyraz i odwrotnie.
Co robić?

Napisany przez: wookieb 8.05.2011, 18:17:02

A na jakiej podstawie mogę stwierdzić co jest źle skoro tych tekstów nie otrzymałem?
Pamiętaj o białych znakach bo skrypt ich nie rozróżnia od "rzeczywistych" znaków.

Napisany przez: evolucja 8.05.2011, 18:22:29

No spróbuj sobie do tego $news['content'] wpisać np.:

Kod
Akademia Piłkarska posiada swoje logo. Grafiką, symbolami i kolorystyką nawiązuje do logo założyciela szkółki Klubu Sportowego Górnik Wesoła. Jest to okrągły znaczek z biało - zielono - czarnymi barwami klubowymi z dodatkiem koloru żółtego. Jak przystało na prawdziwą akademię nakryty jest [b]biretem[/b] symbolizującym edukację młodocianych adeptów sztuki piłkarskiej.

u mnie efekt to:
Kod
Akademia...

Napisany przez: wookieb 8.05.2011, 18:24:50

Zbadaj tekst za pomocą var_dump i sprawdź czy nie maasz białych znaków na początku.

Napisany przez: evolucja 9.05.2011, 16:38:09

1. Wychodzi string(397) podczas gdy tekst wklejony w Wordzie pokazuje liczbę znaków(ze spacjami): 369. Gdy zmienię liczbę ze 150 do 100 tekst skraca do takiej postaci:

Kod
Akademia Piłkarska posiada swoje logo. Grafiką, symbolami i kolorystyką nawiązuje do logo założyciela szkółki Klubu Sportowego Górnik Wesoła. Jest to okrągły znaczek z biało - zielono - czarnymi...


_________
W tym skracaniu musi być jakiś błąd. To nie wina żadnych białych znaków- próbowałem nawet przepisać tekst od początku. Niemożliwe aby z parametrem 260 skracało do jednego wyrazu a z 250 nie skracało prawie w ogóle.



2. Czy tag URL nie powinien też działać gdy poda się sam adres strony w tagach? np.:
Kod
[url]www.google.pl[/url]


3. Da się jakoś zmusić tag IMG do działania z względnymi adresami URL? Na przykład kod:
Kod
[img]photos/thumbs/akademia_logo.png[/img]

otworzony na stronie http://strona.pl/katalogstrony1/ wyświetliło by obrazek
Kod
http://strona.pl/katalogstrony1/photos/thumbs/akademia_logo.png
?

Napisany przez: wookieb 9.05.2011, 17:28:13

Cytat(evolucja @ 9.05.2011, 17:38:09 ) *
W tym skracaniu musi być jakiś błąd. To nie wina żadnych białych znaków- próbowałem nawet przepisać tekst od początku. Niemożliwe aby z parametrem 260 skracało do jednego wyrazu a z 250 nie skracało prawie w ogóle.

Sprawdzę choć nie chce mi się wierzyć.

Cytat
2. Czy tag URL nie powinien też działać gdy poda się sam adres strony w tagach? np.:
Kod
[url]www.google.pl[/url]

Tak też działa, tylko że URL musi zaczynać się do http. To faktycznie troszkę bardzo restrykcyjne. Poprawię.

Cytat
3. Da się jakoś zmusić tag IMG do działania z względnymi adresami URL? Na przykład kod:
Kod
[img]photos/thumbs/akademia_logo.png[/img]

otworzony na stronie http://strona.pl/katalogstrony1/ wyświetliło by obrazek
Kod
http://strona.pl/katalogstrony1/photos/thumbs/akademia_logo.png
?

Założeniem było podawanie url-i do rzeczywistych obrazków. Jeżeli chcesz to wyłączyć to filters/image.class.php linia 85 sprawdza czy adres jest URL-em.
Dodatkowo musisz upewnić się, że wyłączyłeś sprawdzanie rzeczywistych rozmiarów zdjęcia (flaga $checkRealImageSize filters/image.class.php)

Napisany przez: evolucja 9.05.2011, 19:05:17

Łap paczkę z przykładem. Coś z kodowaniem nawet jest nie tak... Wszystko zapisywane w UTF-8, nie wiem czemu więc tak jest.
http://akademiawesola.pl/test_skracania.rar

U mnie efekt tego skryptu to:

Kod
string(16) "W czwartek 21…"

Napisany przez: wookieb 9.05.2011, 19:40:31

Ok poprawione.
Dzięki za znalezienie błędu smile.gif

Napisany przez: mlawnik 9.05.2011, 20:11:48

Można prosić o numery linijek i typy zmian? Staram się na bieżąco updateować to w http://forum.php.pl/Quiz_a_moze_test_t175859.html

Napisany przez: wookieb 9.05.2011, 20:17:05

Jasne.
Linia 1357 bbcode.class.php

  1. $node['text'] = mb_substr(
  2. $node['text'], 0,
  3. $length,
  4. $this->settings->charset);

Napisany przez: mlawnik 9.05.2011, 20:21:54

Poprawiłem i przypominam, że repo z kilkoma nowymi małymi ficzerami i aktualnymi poprawkami @wookieb leży tu:

https://github.com/marcinlawnik/BBcode-modified

Napisany przez: evolucja 10.05.2011, 13:24:25

Cytat(wookieb @ 9.05.2011, 20:40:31 ) *
Ok poprawione.
Dzięki za znalezienie błędu smile.gif

Dzięki również. Mógłbyś rzucić okiem jeszcze na tą paczkę? Coś sobie z kodowaniem ostatniego znaku(jeśli jest znakiem polskim) nie radzi.
http://akademiawesola.pl/test_skracania.rar

Cytat(mlawnik @ 9.05.2011, 21:21:54 ) *
Poprawiłem i przypominam, że repo z kilkoma nowymi małymi ficzerami i aktualnymi poprawkami @wookieb leży tu:

https://github.com/marcinlawnik/BBcode-modified

Jakie te funkcjonalności są? To znaczy, że paczka z pierwszego postu nie ma w sobie aktualnych poprawek?

Napisany przez: mlawnik 10.05.2011, 15:02:30

Poprawki są od strony 6, nie wiem, ale chyba wookieb je uploaduje.
Oprócz tego na nowy podmieniony jest odtwarzacz youtube i coś tam jeszcze.

Napisany przez: wookieb 10.05.2011, 21:20:37

Tak wrzuciłem Twoje poprawki mlawnik
Projekt jest już na githubie pod adresem
https://github.com/wookieb/bbcode

Proszę o dodawanie informacji o bugach właśnie tam.
Jeżeli ktoś nie ma konta może również pisać tutaj.

Napisany przez: mlawnik 20.06.2011, 20:43:27

Katalogi z SVN-a ci się skopiowały.

Przydałby się .gitignore

Znowu coś ze skracaniem wyrazów:

Zrzut bazy:

  1. --
  2. -- Table structure for table `Levels`
  3. --
  4.  
  5. CREATE TABLE IF NOT EXISTS `Levels` (
  6. `ID_lvl` smallint(6) NOT NULL,
  7. `Question` text COLLATE utf8_unicode_ci NOT NULL
  8. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
  9.  
  10. --
  11. -- Dumping data for table `Levels`
  12. --
  13.  
  14. INSERT INTO `Levels` (`ID_lvl`, `Question`) VALUES
  15. (1, 'Najpierw sprawdzimy czy nie jesteś idiotą. \nPytanie brzmi: 2+2*2 jest?'),
  16. (2, 'Jak nazywa się konstruktor tego karabinu?\r\n [.img]http://ttg.webuda.com/lvl2/aks.PNG[./img]'),
  17. (3, 'Najbardziej dochodowy film w historii?\r\n'),
  18. (4, 'Od jakiego słowa pochodzi nazwa "Google"?\r\n'),
  19. (5, '01010011011000010110110101101111011000110110100001101111011001000111101001101001
    01101011\r\n'
    ),
  20. (6, 'Ile grodzi wodoszczelnych miał RMS Titanic?\r\n[.img]http://ttg.webuda.com/lvl6/tytanik.PNG[./img]\r\n'),
  21. (7, 'Jaką tablicę mają Tworzanice?(Chodzi o pierwsze trzy litery)\r\n[.img]http://ttg.webuda.com/lvl7/tab.png[./img]\n'),
  22. (8, 'Jak [.b]naprawdę[./b] nazywa się autor Sztuki Wojennej?\r\n\r\n[youtube]http://www.youtube.com/watch?v=wtaja8lkEdk[/youtube]\r\n'),
  23. (9, 'Jaka litera jest na szczysie tzw."Tablicy Snellena"?\r\n\r\n[.img]http://www.ttg.webuda.com/lvl10/snellen.PNG[./img]');



Kod:
  1. //connection
  2. if (!($conn = http://www.php.net/mysql_connect($db_hostname, $db_username, $db_password))) {
  3. http://www.php.net/print("$LANG[db_connect_error]");
  4. http://www.php.net/error_log("$LANG[db_connect_error]\r\n", 3, '../log/db.log');
  5. http://www.php.net/exit;
  6. }
  7.  
  8. //encoding
  9. mysql_set_charset('utf8', $conn);
  10.  
  11. //db selection
  12. if (!($db = http://www.php.net/mysql_select_db($db_name, $conn))) {
  13. http://www.php.net/print $LANG['db_select_error'];
  14. http://www.php.net/error_log("$LANG[db_select_error]\r\n", 3, '../log/db.log');
  15. http://www.php.net/exit;
  16. }
  17.  
  18. //display db table
  19. $result = http://www.php.net/mysql_query("SELECT * FROM Levels");
  20. if (!$result) {
  21. http://www.php.net/die("$LANG[db_query_error]");
  22. }
  23.  
  24. $table_display = '<table border=\'1\'><tr>';
  25.  
  26. $table_display .= "<td>$LANG[level]</td><td>$LANG[question]</td><td>$LANG[edit]</td>";
  27.  
  28. $table_display .= "</tr>\n";
  29. // printing table rows
  30. while($row = http://www.php.net/mysql_fetch_row($result))
  31. {
  32. $table_display .= '<tr>';
  33.  
  34. // $row is array... foreach( .. ) puts every element
  35. // of $row to $cell variable
  36. foreach($row as $cell)
  37. if(mb_strlen($cell) >= 3){
  38.  
  39. $bb = new BbCode();
  40. $bb->parse($cell, false);
  41. $cut_cell = $bb->cutText(30);
  42. $table_display .= "<td>$cut_cell</td>";
  43. }
  44. else{
  45. $table_display .= "<td>$cell</td>";
  46. }
  47. $table_display .= "<td><img src=\"../templates/$CONF[template]/img/page_edit.png\">
  48. </td>";
  49. $table_display .= "</tr>\n";
  50. }




Coś zrobiłem źle, czy to wina skryptu?

Kropki w zrzucie są specjalnie, bo forum wyświetlało obrazki wink.gif

Napisany przez: wookieb 20.06.2011, 21:22:38

Hmm u mnie wszystko śmiga elegancko bez żadnych problemów.
Sprawdź czy na pewno wszystko z twoim kodowaniem OK ale najpierw popraw wszystkie błedy E_NOTICE.

Napisany przez: mlawnik 20.06.2011, 21:24:24

U autora zawsze śmiga wink.gif

live demo:

yopqsdev.orchestra.io/admin

admin
samplepassword

https://github.com/marcinlawnik/Yopqs/blob/dev/admin/edit.php


---------------------
EDIT
A gdzie te E_NOTICE?

Napisany przez: wookieb 20.06.2011, 22:18:37

Miałeś starą wersję parsera.
Zassaj nową.
Wrzuciłem jedną poprawkę, ale nie dotyczyła ona twojego błędu.

Napisany przez: mlawnik 21.06.2011, 18:52:17

Faktycznie, trochę lepiej. Zobaczę kodowanie, i dam znać.

Czy jest możliwość utworzenia osobnej "czystej" gałęzi z samym kodem, bez przykładów?
Chciałbym dodać sobie twój parser jako submoduł, i nie bawić się w ciągłe poprawki.

Napisany przez: wookieb 22.06.2011, 14:26:03

Narazie nie za bardzo. To repo całego projektu (czyli również przykładów) a wydzielanie gałęzi tylko na kod i ciągłe jej uaktualnienia (co każdy commit) jest bezsensowne.

Napisany przez: mlawnik 22.06.2011, 16:30:36

A gałąź z kodem (praca na niej) i merge z masterem?

Napisany przez: wookieb 22.06.2011, 16:41:39

A merge usunąłby pliki usunięte w branchu z kodem.

Napisany przez: mlawnik 22.06.2011, 19:42:07

Szukałem, szukałem i... znalazłem:


http://stackoverflow.com/questions/1407638/git-merge-removing-files-i-want-to-keep?answertab=active#tab-top


Ale racja, to dużo roboty.

Napisany przez: evolucja 19.08.2011, 13:09:43

Zgłosiłem błąd na githubie smile.gif

Napisany przez: master_25 14.09.2011, 17:38:47

Witam, takie pytanie:
Czy jest w miarę prosta możliwość dodania tagu w formie:

np.

Aby został przeparsowany na

Kod
[img]n[/img]

$liczba = floor(n/1000);
<img src="strona.pl/zdjecie/$liczba/n.png" alt="n.png"/>

a jeżeli to nie jest liczba to nie wyświetlać taga?

Napisany przez: Tanner963 17.09.2011, 20:13:03

Co muszę zrobić, aby nie zamykało automatycznie niedomkniętych tagów?
Mam ustawione:

  1. /**
  2. * Czy poprawiać poprawność użycia kolejności tagów. Np. [.b]tekst[.i] kursywą[./b] zostanie zamienione na [.b]tekst[.i] kursywą[./i][./b]
  3. * @var bool
  4. */
  5. public $validHtml = false;

jednak tagi i tak poprawia i zamyka... no a powinien wgl nieparsować sad.gif
Mam najnowszą wersję z GitHuba.
Z góry dzięki smile.gif

Napisany przez: wookieb 17.09.2011, 20:55:22

Niedomykanie a poprawa kolejności to 2 różne rzeczy.
Nie ma możliwości wyłączenia domykania tagów.

@master_25 Musisz utworzyć nowy tag i przypisać do niego funkcję parsującą (przykłądy masz w katalogu Filters).
Wersja na której możesz się wzortować jest tutaj https://github.com/wookieb/bbcode/blob/master/Bbcode/Filters/Youtube.php
W razie pytań pisz.

Napisany przez: Tanner963 24.09.2011, 17:40:19

Mam kolejny problem - wstawiłem BBCode'a od kodu i do niego inne BBCode'y no i je sparsowało :| Wgrałem więc od nowa cały parser -> dalej parsuje w [.code][/.code]

Z góry dzięki za pomoc

Napisany przez: wookieb 24.09.2011, 18:34:16

A dokłądniej?
Przykład?

Napisany przez: Tanner963 24.09.2011, 18:59:15

Sory, nie sprecyzowałem..
Poprawka:
Parsuje tag kodu tylko np.:

Kod
[.code]to w środku nie powinno być parsowane [.code]jednak to mi się parsuje[./code] [b]ale to już nie jest pogrubione[/b][./code]


Nie mam pomysłu sad.gif

Napisany przez: favik 27.03.2012, 13:50:29

Witam,
ogólnie klasa super, mam jednak mały mankament. Mianowicie używając tagu bbcode size i podając w nim bardzo mały parametr np 2 czcionka jest bardzo mała, a nie taka jak ustawiona dla tego tagu minimalna np 10px

Przykład:

Kod
//text pobrany z bazy danych
$text = '[size=2]test size[/size]';
$bb = new BbCode();
$bb->parse($text, false);
$out = $bb->getHtml();
...

echo $out;


wynikowy tekst jest bardzo mały i ma wielkość 2 px, nie wiem czy jest to błąd czy tak już powinno być, a może powinienem użyć jeszcze jakiejś metody?

Napisany przez: wookieb 27.03.2012, 20:30:46

Masz rację - to mów wielki błąd.
Przepraszam barzdo, fix już jest w repozytorium na githubie smile.gif

Napisany przez: xxdrago 30.03.2012, 19:28:42

A ja się chciałem zapytać bo już się bawię kilka msc tym ( raz zaczynam i się podaje), no więc pisze sobie bloga mam system podstron i newsów, tam wyświetlam chciałbym wyświetlić kod dla użytkowników sformatowany w htmlspecialchars i ładnie koloruje SyntaxHighlighter w JS. W bazie danych kod wygląda tak:

Kod
[php]
function ustawienia($s) {
// Funkcja zwraca jakie ustawienia sa w bazie danych

    global $db;

    $ustawienia = 'SELECT * FROM  `ustawienia` '; // Zapytanie.

    if ($s == 'nazwa') {
        $zapytan = $db-&gt;query($ustawienia);
        $row = $zapytan-&gt;fetch_assoc();
        return $row['nazwa'];
    }

    if ($s == 'opis') {
        $zapytan = $db-&gt;query($ustawienia);
        $row = $zapytan-&gt;fetch_assoc();
        return $row['opis'];
    }
    if ($s == 'tagi') {
        $zapytan = $db-&gt;query($ustawienia);
        $row = $zapytan-&gt;fetch_assoc();
        return $row['slowa_kluczowe'];
    }
// koniec
}
[/php]


A jeżeli go wyświetlam to w efekcie dostaje:
Kod
<br>
function ustawienia($s) {<br>
// Funkcja zwraca jakie ustawienia sa w bazie danych<br>
<br>
    global $db;<br>
<br>
    $ustawienia = 'SELECT * FROM  `ustawienia` '; // Zapytanie.<br>
<br>
    if ($s == 'nazwa') {<br>
        $zapytan = $db->query($ustawienia);<br>
        $row = $zapytan->fetch_assoc();<br>
        return $row['nazwa'];<br>
    }<br>
<br>
    if ($s == 'opis') {<br>
        $zapytan = $db->query($ustawienia);<br>
        $row = $zapytan->fetch_assoc();<br>
        return $row['opis'];<br>
    }<br>
    if ($s == 'tagi') {<br>
        $zapytan = $db->query($ustawienia);<br>
        $row = $zapytan->fetch_assoc();<br>
        return $row['slowa_kluczowe'];<br>
    }<br>
// koniec<br>
}<br>


Była by możliwość usunięcia tego <br> np. w znaczniku php? ponieważ wyświetla się z tym <br> , i tak się chciałem zapytać jeżeli wyświetlam kod to po co go przesyłać przez htmlspecialchars? Skoro można to zrobić podczas dodawania np. Newsa (w kodzie nie zaufanym)?

Pozdrawiam,
Tomasz

Napisany przez: wookieb 31.03.2012, 21:49:05

Wszystko co nie jest sparsowane bezpośrednio przez tag bbcode jest traktowane htmlspecialchars + nl2br. Musisz dodać nowy tag php i w funkcji parsującej wyłączyć wstawianie BR.

Przykładowe rozszerzenie plugin Code o Twój tag "PHP".

  1. class BbCodeFilterCode {
  2. public $tags = http://www.php.net/array(
  3. 'code' => http://www.php.net/array(
  4. 'open' => 'div class="code_wrapper"',
  5. 'close' => 'div',
  6. 'notallowed_child' => 'all',
  7. 'leave_notallowed_child' => 1,
  8. 'leave_notallowed_parent' => 1,
  9. 'parse_body' => 'parseCode'
  10. ),
  11. 'php' => http://www.php.net/array(
  12. 'open' => 'div',
  13. 'close' => 'div',
  14. 'notallowed_child' => 'all',
  15. 'leave_notallowed_child' => 1,
  16. 'parse_body' => 'parsePHP'
  17. )
  18. );
  19.  
  20. /**
  21. * Parsuje tag CODE
  22. * @param array $tag
  23. * @param array $openNode
  24. * @param array $body
  25. * @param array $closeNode
  26. */
  27. public function parseCode($tag, &$openNode, &$body, &$closeNode) {
  28. // tutaj mozemy dodać geshi czy to tez sie podoba
  29. $openNode['text'].='<div class="code_title">Kod</div><div class="code_area">';
  30. $closeNode['text'] = '</div>'.$closeNode['text'];
  31. }
  32.  
  33. public function parsePHP($tag, &$openNode, &$body, &$closeNode) {
  34. foreach ($body as &$node) {
  35. if ($node['type'] === BbCode::NODE_TYPE_TEXT) {
  36. $node['nobr'] = true;
  37. }
  38. }
  39. }
  40. }

Napisany przez: xxdrago 3.04.2012, 20:15:13

Ok, teraz mi się podoba, jak wyłączyć htmlspecialchars?

Napisany przez: wookieb 3.04.2012, 20:22:24

  1. $node['nobr'] = true;
  2. $node['nohtmlspecialchars'] = true'

Napisany przez: xxdrago 3.04.2012, 22:03:26

Super dziękuje, teraz mam taki problem nie wiem czy mój czy klasy ale wydaje mi się ze klasy , że za tagiem code, lub quote zmniejszają mi się same litery:
Tekst z code/quote:
http://xxdrago.pl/tmp/1.gif

http://xxdrago.pl/tmp/txt_code.txt - to co wrzucam do prasowania bb-code.
http://xxdrago.pl/tmp/txt_code_html.txt - to co zostało wygenerowane przez klasę(HTML).

Tekst bez code/quote:
http://xxdrago.pl/tmp/2.gif

http://xxdrago.pl/tmp/txt_nocode.txt - czysty tekst prasowany przez bb-code
http://xxdrago.pl/tmp/txt_nocode_html.txt - tekst wygenerowany przez klasę(HTML).

W CSS nic nie mogę znaleźć...

Napisany przez: KG- 24.04.2012, 13:28:03

Bardzo fajny skrypt, ale znalazłem jednego niewielkiego buga (zgłosiłem już na githubie).
Przy okazji mam jedno pytanie: coś szczególnego powinienem uwzględnić, jeśli chcę dodać odpornego na XSS taga

Kod
[font="nazwa fonta do font-family"]cośtam[/font]
czy wystarczy coś w rodzaju:
Kod
        'font' => array(
            'open' => 'span',
            'close' => 'span',
            'attributes' => array(
                'font' => array(
                    'attr' => 'style',
                    'type' => 'string',
                    'name' => 'font-family:',
                    'required' => true
                )
            )
        ),

Napisany przez: deluks1980 10.05.2012, 14:14:26

Więcej komplikacji z ustawieniem czegoś jakiegoś inteligentnego kodu niż to wszystko warte... :/

W jaki sposób mogę zmodyfikować tag size, aby dla poszczególnego atrybutu ustawiało ustawiony rozmiar?

Np.

  1. [size=1]text[/span]
odpowiadać będzie
  1. <http://december.com/html/4/element/span.html style="font-size: 12px;">teskt</http://december.com/html/4/element/span.html>

  1. [size=2]text[/span]
odpowiadać będzie
  1. <http://december.com/html/4/element/span.html style="font-size: 14px;">teskt</http://december.com/html/4/element/span.html>

  1. [size=4]text[/span]
odpowiadać będzie
  1. <http://december.com/html/4/element/span.html style="font-size: 20px;">teskt</http://december.com/html/4/element/span.html>


itd.

Napisany przez: wookieb 10.05.2012, 18:24:17

  1. 'size' => http://www.php.net/array(
  2. 'open' => 'span',
  3. 'close' => 'span',
  4. 'attributes' => http://www.php.net/array(
  5. 'size' => http://www.php.net/array(
  6. 'attr' => 'style',
  7. 'type' => 'string',
  8. 'name' => 'font-size:',
  9. 'values' => http://www.php.net/array(
  10. '1' => '14px',
  11. '2' => '16px',
  12. '3' => '18px',
  13. '4' => '20px'
  14. ),
  15. 'replace' => true
  16. )
  17. )
  18. ),


http://wookieb.pl/bbcode/readme.html#string

Napisany przez: deluks1980 16.05.2012, 08:33:31

Dzięki wielkie, ułożyłem coś podobnego według manuala, z tym, że u mnie nie działało to nadałem type jako number.

Dzięki. Kawał dobrej roboty.

Witaj,

Mam z tym jeszcze mały problem, nie wiem czy to bug, jednak gdy w treści jest HTML, a następnie użyję:

  1. $bbcode->parse($n->content, true );


To znaczniki takie jak
  1. <http://december.com/html/4/element/strong.html>tekst</http://december.com/html/4/element/strong.html>
,
  1. <http://december.com/html/4/element/u.html>tekst</http://december.com/html/4/element/u.html>
i wszystkie inne HTML'owe nie działają, czyli w zasadzie tak ma być.
Do czasu, kiedy użyję
  1. <http://december.com/html/4/element/a.html href="http://google.pl/">Tekst</http://december.com/html/4/element/a.html>
, wtedy zamiast tego, widzę:

  1. <http://december.com/html/4/element/a.html href="http://google.pl/...;>Tekst</http://december.com/html/4/element/a.html>


A co najlepsze,
  1. http://google.pl/...;>Tekst</http://december.com/html/4/element/a.html>
jest parsowana na link, czyli można to kliknąć, jednak odnośnik jest wtedy następujący:
  1. http://google.pl/%22%3ETekst%3C/a%3E
.

Dopiero, kiedy użyję:

  1. $bbcode->parse($n->content, false );
  2. $code = $bbcode->getBbcode();
  3. $bbcode->getSettings()->trustText = true;
  4. http://www.php.net/echo $bbcode->parse($code);


To
  1. <http://december.com/html/4/element/a.html href="http://google.pl/">Tekst</http://december.com/html/4/element/a.html>
nie jest parsowany i jest widoczny tak jak napisałem.
Moje pytanie; czy tak ma być? Muszę używać dodatkowych funkcji aby przeparsować tekst tylko dla <a> w tekście?

Pozdrawiam.

Napisany przez: Lirdoner 5.08.2012, 12:02:34

Odkopię trochę temat bo mam mały problem.
Jak zrobić aby używając taga img w wyniku końcowym wyświetlany obrazek był również odnośnikiem do tego obrazka?
Wiem, że można by zastosować url i w nim img ale dla wygody użytkowników wolałbym aby to działo się tylko przy wykorzystaniu img

Napisany przez: wookieb 5.08.2012, 16:49:43

Aktualnie jest tak jeżeli zrobisz coś takiego

Kod
[URL][IMG]http://adres/obrazka.jpg[/IMG][/URL]

To url przyjmie adres obrazka.
Takie rozwiązanie jest znacznie bardziej użyteczne niżeli ciągłe wymuszanie aby obrazek zawsze był linkiem.
Jeżeli już jednak na pewno chcesz to zrobić to lepiej uczynić to wyrażeniem regularnym przed podaniem tekstu do parsera niżeli zmieniać jego zachowanie.

Napisany przez: corey1991 9.09.2012, 12:11:07

Witam, miałem okazję wykorzystać klasę i muszę powiedzieć, że na prawdę jest świetna! Tylko przy edycji filtra Youtube napotkałem mały problem. Minowicie zamiast wstawiania całego iframe poprzez dopisanie kodu w tym miejscu:

  1. $openNode['text'] = '<iframe title="YouTube video player" width="560" height="349"
  2. src="http://www.youtube.com/embed/'.$idMovie.'?rel=0" frameborder="0">
  3. </iframe>
  4. ';

zrobiłem coś takiego:
  1. public $tags = http://www.php.net/array(
  2. 'youtube' => http://www.php.net/array(
  3. 'open' => 'iframe',
  4. 'close' => 'iframe',
  5. 'notallowed_child' => 'all',
  6. 'parse_body' => 'checkMovie',
  7. 'hide_body_in_cut_text' => true,
  8. 'attributes' => http://www.php.net/array(
  9. 'width' => http://www.php.net/array(
  10. 'attr' => 'width',
  11. 'type' => 'number',
  12. 'default_value' => '457'
  13. ),
  14. 'height' => http://www.php.net/array(
  15. 'attr' => 'height',
  16. 'type' => 'number',
  17. 'default_value' => '329'
  18. ),
  19. )
  20. )
  21. );

tylko mam problem ze wstawieniem atrubutu src, bo po width i height zamyka mi tag iframe.

Na szybko rozwiązałem to obcinając ostatni znak poprzez substr(), ale to nie ładne rozwiązanie.
  1. $openNode['text'] = http://www.php.net/substr($openNode['text'],0,-1);
  2. $openNode['text'] .= ' src="http://www.youtube.com/embed/'.$idMovie.'" frameborder="0">';


I moje pytanie brzmi, jak to rozwiązać, żeby nie trzeba było nic obcinać, a src też dodawało jako atrybut?

Pozdrawiam!

Napisany przez: wookieb 9.09.2012, 19:32:26

Rozwiązanie jest OK. Wartość parametru jest generowana więc musi to być zrobione własnie w podany sposób.

Napisany przez: Zaszczyk 24.09.2012, 22:03:01

Chcę otrzymać zajawkę tekstu i używam takiego kodu:

  1. $bbcode->parse($forumr[2], false)->trustText = true;;
  2. $forum[$i][2] = $bbcode->cutText(120,false);//tresc postu


Jednakże, jak zrobić żeby klasa usuwała wszystkie tagi bbcode, tak żeby ani nie działałay ani nie były widoczne?

Napisany przez: wookieb 24.09.2012, 22:10:05

Nie ma takiej możliwości.
Pobierz wersję HTML i usuń z niej tagi za pomocą na strip_tags

Napisany przez: Zajec 3.11.2012, 11:42:21

  1. public function parseQuote($tag, $openNode, $body, &$closeNode, $settings) {
Zapomniałeś ampersanta przy $openNode. Z kolei $body niby nie edytujesz w tej funkcji, ale też przydałoby się dla spokoju dać & . Chwilę się głowiłem, czemu nie dostaję odpowiednich tagów wink.gif

wookieb: czy mógłbyś pomóc mi jeszcze z obsługą URL? Chodzi o to, że dwukrotnie adres przechodzi przez htmlspecialchars.

Kod:
  1. require_once 'include/BbCode/BbCode.class.php';
  2. $bbcode = new BbCode();
  3. $text='http://google.pl/test?foo=a&bar=b';
  4. http://www.php.net/echo $bbcode->parse($text, true);


Output:
Kod
Hello <a href="http://google.pl/test?foo=foo&amp;amp;bar=bar">Test</a> world


Jak widzisz, adres ma "&amp;amp;" i linki nie działają sad.gif

Napisany przez: wookieb 3.11.2012, 18:39:39

@Zajec - bardzo dziękuję za wykrycie buga - błąd został naprawiony smile.gif

Napisany przez: Zajec 3.11.2012, 19:00:33

Dzięki serdeczne! Widzę też, że przesiadłeś się na filter_var w checkUrl. Jestem za, loklanie używałem podobnej modyfikacji.

Troszkę przeszkadzało mi, że filter_var nie akceptuje relatywnych linków, moja funckja wygląda więc następująco:

  1. public http://www.php.net/static function checkUrl($text)
  2. {
  3. $valid = filter_var($text, FILTER_VALIDATE_URL);
  4. if (!$valid)
  5. $valid = filter_var('http://php.net/' . $text, FILTER_VALIDATE_URL);
  6. if (!$valid)
  7. return false;
  8. return http://www.php.net/preg_replace('/(java script:)/is', '', $text);
  9. }
(Tak podaję, gdyby ktoś potrzebował konstrukcji typu
Kod
[url]/homepage[/url]
).

Dzięki za super projekt smile.gif

P.S.
Zmienna $inImg w parseUrl jest raczej zbędna, tylko raz jest ustawiana na true i zaraz po tym występuje instrucka "break".

Napisany przez: wookieb 3.11.2012, 19:13:23

Sztywne użycie php.net w checkUrl jest trochę... jednostronne, więc nie wprowadzam tego do kodu.
Co do $inImg - szczerze mówiąc zostawie tak jak jest dopóki działa. Bbcode 2.0 już niedługo więc nie będzie takich kwiatków smile.gif

Napisany przez: Zaszczyk 8.11.2012, 18:41:12

Zastosowałem tą klasę na swoim małym forum żeby, działała funkcja cytuj i napisałem taki kod:

  1. $tresc = http://www.php.net/htmlspecialchars(http://www.php.net/mysql_real_escape_string($_POST['tresc']));
  2. $bbcode->getSettings()->trustText = false;
  3. $bbcode->parse($tresc,false);
  4. $tresc=$bbcode->getBbcode();


$tresc to tresc postu. Ale niestety funkcja cytuj nie działa prawidłowo np:

Cytat
mmmmmmmmmmmmmm[/qoute]


takie zapytanie wrzuca do bazy.

  1. 'quote' => http://www.php.net/array(
  2. 'open' => 'div class="quote"',
  3. 'close' => 'div',
  4. 'parse_body' => 'parseQuote',
  5. 'attributes' => http://www.php.net/array(
  6. 'quote' => http://www.php.net/array(
  7. 'type' => 'string'
  8. ),
  9. 'date' => http://www.php.net/array(
  10. 'type' => 'string'
  11. )
  12. )
  13. )


Dzięki za pomoc wink.gif



Napisany przez: wookieb 8.11.2012, 18:55:05

Podaj proszę dokładną zawartość zmiennej $_POST['tresc'];
U mnie zwykły quote działa.

Napisany przez: Zaszczyk 8.11.2012, 19:27:24

  1. [qote]trolololo[/qote]
  2.  
  3. tutaj jest zwykly post


a do bazy wrzuca mi coś takiego:

  1. \[qote]
  2. trolololo
  3.  
  4.  
  5. tutaj jest zwykly post
  6. \[/qote]
  7. \[/qote]


literowka w [qote] celowa, bo forum nie chciało przepuścić.

Napisany przez: wookieb 8.11.2012, 20:04:25

Tag zamykający quote był (jak domniemam) nieprawidłowy "[/qoute]" co powoduje, że bbcode sam zamknął tag po koniec tekstu gdyż nie było żadnego innego prawidłowego zamknięcia cytatu.

Napisany przez: Zaszczyk 12.12.2012, 16:54:45

Mam problem z klasą, jak dodaje rekord do bazy to znaki specjalne takie jak ",&,< i > (możliwe też że inne) zamienia mi na &quot; &amp; itd. Da się ten problem rozwiązać za zmianą ustawień w klasie? Bo że używajac str_replace da się to zrobić to wiem

Napisany przez: wookieb 12.12.2012, 17:19:47

To domyślne zachowanie które zabezpiecza przed tym aby nie wyświetlać HTML-a. Nie da się tego wyłączyć.

Napisany przez: pionas 17.02.2013, 10:05:47

Cześć,

bardzo fajna klasa, niestety jednak dzisiaj ujrzałem jej błąd.

Nie mogę tu tego wkleić, ale jest coś takiego:
[url=
[b
[color = "Red"]

i zamknięcie tych tagów

Notice: Undefined index: URL in Bbcode/BbCode.php on line 841
Notice: Undefined index: COLOR in Bbcode/BbCode.php on line 841

Co jest nie tak?

Napisany przez: wookieb 17.02.2013, 10:28:54

Ściągasz wersję bezpośrednio z githuba?
Po uruchomieniu skrawków przykładu bbcode, który dostarczyłeś nie otrzymuję żadnego błędu smile.gif

Jeżeli masz problem ze wstawieniem tegoż bbcode, użyj proszę gist.github.com

Napisany przez: boro11 3.04.2013, 20:38:54

Witam!
Od jakiegoś czasu używam Twojego parsera i jestem z niego bardzo zadowolony, ale mam jeden problem.

Podczas kopiowania tekstu zachowuje się jego formatowanie np. tekst:

Cytat
Hello Vic!
Website status is updated during refback adding so just wait till we get payment from that website. Your clicks is counted even if your status is "Pending" so don't worry you will be paid for each click you made.

Thank you for choosing RefbackBank.com and have a wonderful day. If you have any questions, please contact us at any time.

Best regards,
Boro
https://www.refbackbank.com


Skopiowałem ze swojego sytemu helpdesk, po wklejeniu na forum otrzymałem:

Cytat
Hello Vic!
[*font="Verdana Geneva Arial Helvetica sans-serif"]Website status is updated during refback adding so just wait till we get payment from that website. Your clicks is counted even if your status is \"Pending\" so don\'t worry you will be paid for each click you made.[/font]

[*font="Verdana Geneva Arial Helvetica sans-serif"]Thank you for choosing RefbackBank.com and have a wonderful day. If you have any questions, please contact us at any time. [/font]

[*font="Verdana Geneva Arial Helvetica sans-serif"]Best regards, [/font]
[*font="Verdana Geneva Arial Helvetica sans-serif"]Boro[/font]
[*font="Verdana Geneva Arial Helvetica sans-serif"]https://www.refbackbank.com[/font]


Poszukałem trochę i znalazłem opcje $removeInvalidTags - która jest domyślnie ustawiona na true ( i jest tak u mnie) co powinno zlikwidować problem tagów które nie istnieją, jednak mimo wszystko pojawiają się one. Co można zrobić żeby temu zaradzić zakładając, że nie chce dać możliwości zmiany czcionki użytkownikom?


Ps. Oczywiście znaków * nie ma, ale je dodałem bo to forum tego problemu nie ma jak się okazuję i zmienia na inne fonty smile.gif

Napisany przez: wookieb 3.04.2013, 21:16:28

Faktycznie był mały błąd w parserze. Poprawione - wersja na githubie smile.gif

Napisany przez: boro11 3.04.2013, 22:20:49

Teraz działa idealnie dziękuję smile.gif

Napisany przez: Lirdoner 19.04.2013, 12:15:08

Witam, chciałbym aby jeżeli tekst odnośnika do strony jest dłuższy niż 100 znaków to pojawiały się tylko 20 pierwszych znaków, następnie ... i końcowe 20 znaków.
Jak to zmienić w parserze?

Napisany przez: wookieb 19.04.2013, 17:08:48

https://github.com/wookieb/bbcode/blob/master/Bbcode/Filters/Url.php
Metoda shortUrl

Napisany przez: benzulli 18.01.2014, 23:49:44

Witam,

Jak mogę to umieścić na swojej stronie? Chciałbym tak zrobić, żeby można było bbcode używać przy dodawaniu newsa, już cały skrypt gotowy, tylko jak to tam wsadzić?

Napisany przez: wookieb 19.01.2014, 07:13:58

Musisz zastosować parser bbcode przy zapisie aby zastąpić oryginalną treść newsa treścią z parsera. Przykład jak wykorzystać parser jest podany na 1 stronie tematu oraz w repozytorium.

Napisany przez: benzulli 19.01.2014, 13:24:40

  1. <form action="" method="post">
  2. <select name="id_profesji">
  3. <?php
  4. include("polacz.php");
  5. $results = http://www.php.net/mysql_query("SELECT id, profesja FROM profesje");
  6. while($id_profesji = http://www.php.net/mysql_fetch_array($results))
  7. {
  8. ?>
  9. <option value="<?php http://www.php.net/echo $id_profesji[0]; ?>">
  10. <?php http://www.php.net/echo $id_profesji[1]; ?>
  11. </option>
  12. <?php
  13. }
  14. ?>
  15. </select><br />
  16. Tytuł<br />
  17. <input type="text" name="tytul" /><br />
  18. Level:<br />
  19. <input type="text" name="level" /><br />
  20. Wersja:<br />
  21. <input type="text" name="version" /><br />
  22. Ostatnia aktualizacja: <br />
  23. <input type="text" name="last_update" /><br />
  24. Video: <br />
  25. <input type="text" name="video" /><br />
  26. Treść: <br />
  27. <textarea name="tresc"></textarea>
  28. <input type="submit" value="Dodaj" />
  29. </form>
  30. <?php
  31. $tytul = $_POST['tytul'];
  32. $level = $_POST['level'];
  33. $version = $_POST['version'];
  34. $last_update = $_POST['last_update'];
  35. $video = $_POST['video'];
  36. $id_profesji = (int)$_POST['id_profesji'];
  37. $tresc = $_POST['tresc'];
  38. if($_SERVER['REQUEST_METHOD'] == 'POST')
  39. {
  40. $query = http://www.php.net/mysql_query("INSERT INTO skrypty SET tytul='$tytul', level='$level', version='$version', last_update='$last_update', video='$video', id_profesji='$id_profesji', tresc='$tresc'");
  41. if($query) http://www.php.net/echo "Poradnik został dodany poprawnie";
  42. else http://www.php.net/echo "Błąd, nie udało się dodać nowego poradnika";
  43. }
  44. ?>


Mam taki kod, on jest odpowiedzialny za dodanie nowego newsa. Pytam bo nie wiem, czytam już trzeci raz i nie wiem co i jak do czego. Mam po prostu zaincludować na samą górę plik bbcode.php?

Napisany przez: wookieb 19.01.2014, 14:02:16

Najpierw naucz się programować. Koniec dyskusji.

Napisany przez: benzulli 15.02.2014, 21:36:58

Witam, poradziłem sobie z tym już jakiś czas temu, lecz teraz tak naprawdę zacząłem używać tabeli. Firebug w ogóle nic nie wykazuje, usunąłem cały styl pliku i nadal występuje błąd: nad tabelą pozostaje jakies 500-600px wolnego miejsca. Próbowałem to zmienić margin-top:-500px, ale jest to rozwiązanie niestabilne, bo czasami tabela rozszerza się na większą odległość.

Dodałem to do basic.php

  1. 'table' => http://www.php.net/array(
  2. 'open' => 'table',
  3. 'close' => 'table',
  4. 'notallowed_child' => http://www.php.net/array('table')
  5. ),
  6. 'tr' => http://www.php.net/array(
  7. 'open' => 'tr',
  8. 'close' => 'tr',
  9. 'notallowed_child' => http://www.php.net/array('tr')
  10. ),
  11. 'td' => http://www.php.net/array(
  12. 'open' => 'td',
  13. 'close' => 'td',
  14. 'notallowed_child' => http://www.php.net/array('td')
  15. ),


A taką formę ma mój kod html, który jest potem parsowany:

  1. [table]
  2. [tr]
  3. [td]asdasdas[/td]
  4. [td]adadasdas[/td]
  5. [td]asdasteretrr34[/td]
  6. [/tr]
  7. [tr]
  8. [td]3333[/td]
  9. [td]sawe[/td]
  10. [td]asaa[/td]
  11. [/tr]
  12. [/table]
  13.  


Kiedy dodam tabelkę bez zdjęć odstęp od góry też występuje.

Napisany przez: com 15.02.2014, 21:41:34

pokaż to na przykładzie, bo wrzuciłeś jakieś fragmenty które niczego nie obrazują.. najlepiej link albo jsfiddle

Napisany przez: benzulli 15.02.2014, 21:58:02

  1. blablablablabla 1231231313123123123 test
  2. <?php
  3. require_once 'Bbcode/BbCode.php';
  4. $tresc = '[table]
  5. [tr]
  6. [td]asdasdas[/td]
  7. [td]adadasdas[/td]
  8. [td]asdasteretrr34[/td]
  9. [/tr]
  10. [tr]
  11. [td]3333[/td]
  12. [td]sawe[/td]
  13. [td]asaa[/td]
  14. [/tr]
  15. [/table]';
  16. $parser = new BbCode();
  17. http://www.php.net/echo $parser->parse($tresc); ?>
  18. blablablablabla 1231231313123123123 test


http://renzulli.linuxpl.info/images/parser.php

Tutaj akurat nie ma zbytnio dużego odstępu, jedynie 230px, ale jeśli dam więcej kodu to wtedy występują większe odstępy - nie mam pojęcia dlaczego.

Napisany przez: com 15.02.2014, 22:08:05

Źródło prawdę Ci powie, nwm co to za parser ale coś w nim jest nie tak wink.gif

  1. blablablablabla 1231231313123123123 test
  2. <http://december.com/html/4/element/table.html><http://december.com/html/4/element/br.html />
  3. <http://december.com/html/4/element/tr.html><http://december.com/html/4/element/br.html />
  4. <http://december.com/html/4/element/td.html>asdasdas</http://december.com/html/4/element/td.html><http://december.com/html/4/element/br.html />
  5. <http://december.com/html/4/element/td.html>adadasdas</http://december.com/html/4/element/td.html><http://december.com/html/4/element/br.html />
  6. <http://december.com/html/4/element/td.html>asdasteretrr34</http://december.com/html/4/element/td.html><http://december.com/html/4/element/br.html />
  7. </http://december.com/html/4/element/tr.html><http://december.com/html/4/element/br.html />
  8. <http://december.com/html/4/element/tr.html><http://december.com/html/4/element/br.html />
  9. <http://december.com/html/4/element/td.html>3333</http://december.com/html/4/element/td.html><http://december.com/html/4/element/br.html />
  10. <http://december.com/html/4/element/td.html>sawe</http://december.com/html/4/element/td.html><http://december.com/html/4/element/br.html />
  11. <http://december.com/html/4/element/td.html>asaa</http://december.com/html/4/element/td.html><http://december.com/html/4/element/br.html />
  12. </http://december.com/html/4/element/tr.html><http://december.com/html/4/element/br.html />
  13. </http://december.com/html/4/element/table.html>blablablablabla 1231231313123123123 test

Napisany przez: benzulli 15.02.2014, 23:49:37

Wiem co jest nie tak - po prostu każde przeniesienie do nowej linijki to <br />. Zatem będę musiał tabelki pisać bez przeniesień do nowych linijek.

Napisany przez: com 16.02.2014, 00:39:59

tak ale wgl poco Ci to br tu? przecież jego to się rzadko w obecnych czasach używa do łamana tekstu, akapity wyznaczasz znacznikiem <p>, a br to ostateczność..

Napisany przez: benzulli 16.02.2014, 00:43:52

Właśnie go nie chcę, a to jest w parserze ustawione, że po złamaniu linii w bbcode dodaje <br>. Ja dodałem bbcode tabeli ręcznie. Chciałbym się tego pozbyć.

Napisany przez: com 16.02.2014, 00:59:31

no to warunkiem sprawdzaj czy jesteś w tabeli jeśli tak no to nie dodajesz br jeśli nie no to tak jak było wink.gif

albo stwórz oddzielna metodę do generowana tabelek najlepiej wink.gif

Napisany przez: benzulli 16.02.2014, 08:59:28

Dzięki, po prostu zastosuję preg_replace do tych 6 znaków i po problemie.

@edit
Niestety, po zastosowaniu preg_replace dalej występuje ten błąd. Wgrywałem inne parsery, ale część nie ma tabelek, a w innych to same błędy wyskakują.

Napisany przez: pionas 17.02.2014, 09:03:54

I ja podepnę się do tematu..

ckeditor z wtyczką bbcode tworzy list na takiej zasadzie:
[_list=1]
[_*]Aaaaaaaa
[_*]Bbbbbbbb
[_*]Ccccccccc
[_/list]
(jeśli ma być numerowane)

lub wypunktowanie
[_list]
[_*]Aaaaaaaa
[_*]Bbbbbbbb
[_*]Ccccccccc
[_/list]
jak to dostosować do dodatku List.php?

Dodałem _ bo tutaj działa takie parsowanie...

Napisany przez: sazian 22.06.2014, 21:51:14

kiedyś przerabiałem ten problem z listami
może komuś się przyda https://www.dropbox.com/s/n9ti8d57mgr0ly3/plugin.js?dl=1 teraz ck będzie zamykał tagi w listach, nie pamiętam co tam zmieniałem żeby działało więc musicie szukać sami smile.gif
wydaje mi się chodzi o to

Kod
this.setRules('*', {
                        breakBeforeOpen: 1,
                        breakAfterOpen: 0,
                        breakBeforeClose: 0,
                        breakAfterClose: 1
                    });

ale pewności nie mam

Napisany przez: szajens 6.07.2014, 10:57:02

Przepuszcza 2 razy </b> co może troszkę zepsuć stronę, niestety.

Nie sprawdzałem innych tagów

  1. $text='[ul]
  2. [li]Internet Explorer,
  3. [li][li][li][li][li][li]Firefox,[/li]
  4. [li]Google Chrome 4.0,[/li][/b][/b]
  5. [li]Safari 3.0.[/li]
  6. [/ul]';


  1. <ul>
  2. <li>Internet Explorer,<br />
  3. <b>Firefox,</b></li></b>
  4. <li>Google Chrome 4.0,</li>
  5. <li>Google Chrome 4.0,</li>
  6. <li>Safari 3.0.</li>
  7. </ul>


edit:w rzędzie li jest w środku b, poprostu forumowe bbcode wycieło

Napisany przez: boro11 6.08.2014, 04:04:36

Hej,
przejrzałem dokumentację i parę tagów dostosował pod swoje potrzeby, ale mam problem z emotikonami.
Czy jest możliwość żeby parser wyłapywał z tekstu i zamieniał na obrazki "uśmieszki"
Są dodawane do bazy danych bez znaków "[" i "]" dlatego mam lekki problem w ustawieniu tak parsera żeby brał pod uwagę sam tekst bez tych otwierających i zamykających nawiasów. Jest taka możliwość?

Z góry dziękuję za pomoc jak i za samą klasę smile.gif

Napisany przez: Forti 14.12.2014, 11:08:42

Ze względu na beznadzieje parserów BBcode dla symfony (jeden nie działa na wyższych v niż 2.4, drugi jakieś bugi mi z lokalizacją - nie istotne), pozwoliłem sobie na modyfikację biblioteki. Dodałem namespace i utworzyłem sobie twig extension.

wystarczy dodać namespace do:

bbcode
BbCodeSettings
DataValidator

oraz wszelkie required w tych 3 klasach zamienić na po prostu use.

W katalogu filters jest troche inaczej - dodajemy use lecz nie dodajemy namespace. Jest to mało oryginalne rozwiązanie, lecz działające.

Zrobiłem twig extension w taki sposób:

  1. <?php
  2.  
  3. namespace acme\DemoBundle\Twig;
  4.  
  5. use acme\DemoBundle\Lib\Bbcode\BbCode;
  6.  
  7. class BbcodeExtension extends \Twig_Extension
  8. {
  9. public function getFilters()
  10. {
  11. return http://www.php.net/array(
  12. new \Twig_SimpleFilter('bbcode', http://www.php.net/array($this, 'bbCodeParser')),
  13. );
  14. }
  15.  
  16. public function bbCodeParser($rawText)
  17. {
  18. $text = http://www.php.net/htmlspecialchars($rawText);
  19. $bbcode = new BbCode();
  20. $bbcode->parse($text, false);
  21.  
  22. return $bbcode->getHtml();
  23. }
  24.  
  25. public function getName()
  26. {
  27. return 'acme_bbcode_extension';
  28. }
  29. }


Dodatkowo service (acme/DemoBundle/Resources/Config/services)
i w twig oczywiście musimy zrobić tak:

  1. services:
  2. acme.bbcode_extension:
  3. class: acme\DemoBundle\Twig\BbcodeExtension
  4. tags:
  5. - { name: twig.extension }


w twigu oczywiście:

  1. {{ comment.text|bbcode|raw }} // |raw musi być, inaczej twig robi dodatkowe swoje htmlspecialchars, który my zrobiliśmy przed parsowaniem.



Może komuś się przyda, zwłaszcza żę mamy w tym bbcode m.in. youtube wink.gif


edit:

czy wookie nie obrazi się, jak zrobie z tego odzielnego, nie zależnego Bundle dla symfony i umieszcze na Package wraz z composerem? wink.gif

Napisany przez: wookieb 14.12.2014, 11:35:43

Z przyjemnością smile.gif Jak dodasz to umieszczę potem link do Twojego bundle smile.gif

RAW nie będzie potrzebny jeśli ... http://twig.sensiolabs.org/doc/advanced.html#automatic-escaping

Napisany przez: Forti 5.02.2015, 22:38:03

Wookie pilnuj mnie tongue.gif

Całość mam już gotowe - troche refactoringu i jeszcze testy muszę napisać, chociaż i tak aby dodać do "oficjalnego" repo musi być pokryte nimi 80% kodu ;d

https://github.com/Fortidude/bbcode/

Napisany przez: wookieb 6.02.2015, 05:26:04

Na pewno zrobisz to lepiej smile.gif

Pisałem to tak dawno temu iż wiem, że teraz zrobiłbym to zupełnie inaczej. Swoją drogą polecam ten oto kurs https://www.coursera.org/course/compilers zanim zaczniesz pracę nad parserem smile.gif

Napisany przez: pionas 1.03.2015, 19:35:18

Hej,

po aktualizacji PHP do 5.4.38 parser nie działa.
Wiecie czemu tak się dzieje?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)