Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

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





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




Projekt jest już na githubie pod adresem
https://github.com/wookieb/bbcode

Proszę o dodawanie informacji o bugach właśnie tam.

UPDATE Wersja 1.2
[php bbcode, parser bbcode, advanced bbcode parser]
Chciałbym dziś zaprezentować swój mechanizm parsujący kod bbcode oraz ułatwiający nam kontrolę nad tym czy tagi są prawidłowo używane.
Klasa do pobrania:
https://github.com/wookieb/bbcode/zipball/master

Przykład działania:
http://wookieb.pl/bbcode/test.php

Readme.html w paczce oraz pod adresem http://wookieb.pl/bbcode/readme.html


Licencja
Skrypt wydany na licencji BSD. Dla własnego jak i komercyjnego użytku.

Ustawienia parsera
Ustawienia dla parsera znajdują się teraz w klasie BbCodeSettings. Ciekawsze z ustawień to

Zaufany kod
  1. $settings->trustText = false; // kod niezaufany
  2. $settings->trustText = true; // kod zaufany


Ustawienie kontroluje stopień sprawdzenia danych. Gdy kod bbcode sparsowaliśmy wcześniej to pobieramy jest wersję zaufaną i zapisujemy.
  1. $code = $bbcode->getBbcode();


Przy ponownym odczytaniu kodu, możemy oznaczyć kod jak zaufany. Spowoduje to ominięcie wielu operacji kontroli atrybutów, przez co parsowanie jest szybsze.

Kod
$bbcode = new BbCode();

$text='[b] Bla Bla [i] Hehe';
$bbcode->parse($text, false); // nie chcemy wyniku wiec ustawiamy na false
$code=$bbcode->getBbcode(); // [b] Bla Bla [i] Hehe[/i][/b]

// $code zapisujemy


// po pewnym czasie odczytujemy i parsujemy go jeszcze raz
$bbcode->getSettings()->trustText = true;
echo $bbcode->parse($code);


Dostępność tagów
Możliwe jest włączenie tylko niektórych tagów parsera

Kod
$bbcode = new BbCode();
$text = '[b]Pogrubienie[/b]
[i]Kursywa[/i]';

echo $bbcode->parse($text);
// <b>Pogrubienie</b>
// <i>Kursywa</i>

$bbcode->getSettings()->availableTags = array('b');
echo $bbcode->parse($text);
// <b>Pogrubienie</b>
// Kursywa



Walidacja HTML (kolejności użycia)
Domyślnie parser poprawia kolejność użycia tagów.
np kod
Kod
[b] pogrubienie [i] Kursywa[/b]
[ul]
    [li]Element listy
[/b]
[/i]

Zamieni na

Kod
[b] pogrubienie [i] Kursywa[/i][/b]
[ul]
    [li]Element listy[/li]
[/ul]


Tworzenie zajawek
Parser potrafi tworzyć zajawke o odpowiedniej ilości znaków (ignorując przy tym tagi bbcode).
Wspiera różne kodowania.

Test pod adresem http://wookieb.pl/bbcode/cut_test.php


Rozszerzanie możliwości
Za pomocą tworzenia nowych tagów i dodawania ich specjalnych ustawień można rozszerzyć bbcode o dodatkowe tagi, możliwości.
Szczególnie chciałbym zwrócić uwage na możliwość "przetrzepania" kodu przez funkcje filtrów, dzięki którym możemy tworzyć zaawansowane zależności.
Informacje na temat ustawień dostępne pod linkiem http://wookieb.pl/bbcode/readme.html

ZACHĘCAM DO OCEN, WNOSZENIA WŁASNYCH UWAG A TAKŻE PROPOZYCJI ZMIAN
Mam nadzieję, że przyda się niejednej osobie, która dostrzeże możliwości użycia parsera NIE TYLKO do Bbcode (IMG:style_emoticons/default/smile.gif) i nie tylko.

Update - 2009.05.31
Dodałem tag youtube do paczki.


Inne zmiany:
- poprawiony generowany kod html dla taga IMG
- poprawiona metoda wyszukiwania nazwy taga
- poprawiona szybkość działania
- przeniesienie ustawień do BbCodeSettings
- poprawiona walidacji urli
- dodatkowe zabezpieczenia przed XSS

Ten post edytował wookieb 23.08.2011, 19:46:20
Powód edycji: [wookieb]: [wookieb]: [Spawnm]: update
Go to the top of the page
+Quote Post
12 Stron V   1 2 3 > »   
Start new topic
Odpowiedzi (1 - 99)
.radex
post
Post #2





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

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


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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Ten post edytował .radex 2.03.2009, 20:16:07
Go to the top of the page
+Quote Post
wookieb
post
Post #3





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




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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Co do zapisywania na dysku to jak najbardziej. Ale to już zostawmy mechanizmowi cachowania (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

//UP Cachowanie mam zrobione ale to już oddzielny mechanizm (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .

Ten post edytował wookieb 3.03.2009, 12:38:28
Go to the top of the page
+Quote Post
WebKing
post
Post #4





Grupa: Zarejestrowani
Postów: 219
Pomógł: 16
Dołączył: 16.07.2007

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


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

Nie możesz w funkcji getParseText dać echo zamiast to ciągnąć?
Go to the top of the page
+Quote Post
pyro
post
Post #5





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


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


NIE

Tak jest ok.
Go to the top of the page
+Quote Post
bim2
post
Post #6





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


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.
Go to the top of the page
+Quote Post
gebp
post
Post #7





Grupa: Zarejestrowani
Postów: 180
Pomógł: 6
Dołączył: 10.04.2006

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


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
Go to the top of the page
+Quote Post
wookieb
post
Post #8





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




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

Uaktualniłem paczkę na serwerze.

Ten post edytował wookieb 12.03.2009, 09:46:03
Go to the top of the page
+Quote Post
gebp
post
Post #9





Grupa: Zarejestrowani
Postów: 180
Pomógł: 6
Dołączył: 10.04.2006

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


Dięki ~wookieb.

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

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

no może z wyrównaniem sobie poradzę (jak wcześniej zrobiłem z "color") ale tak ku potomnym bo klasa działa naprawdę extra.
Go to the top of the page
+Quote Post
wookieb
post
Post #10





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




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.
Go to the top of the page
+Quote Post
zegarek84
post
Post #11





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


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
Go to the top of the page
+Quote Post
nrm
post
Post #12





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

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


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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Trzeba tą odpicować i będzie gites (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/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).
Go to the top of the page
+Quote Post
SHiP
post
Post #13





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

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


Ok sprawdziłem i dwie uwagi (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Pozdrawiam
Go to the top of the page
+Quote Post
wookieb
post
Post #14





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




Klasa została poprawiona i usprawniona. Dodałem wszystkie standardowe tagi bbcode.
Można ściągać i sprawdzić teraz.
Go to the top of the page
+Quote Post
slewin
post
Post #15





Grupa: Zarejestrowani
Postów: 104
Pomógł: 7
Dołączył: 9.12.2008
Skąd: wroc

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


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

Ten post edytował slewin 14.05.2009, 13:42:11
Go to the top of the page
+Quote Post
wookieb
post
Post #16





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




Zapewne masz php4 zamiast php5
Go to the top of the page
+Quote Post
slewin
post
Post #17





Grupa: Zarejestrowani
Postów: 104
Pomógł: 7
Dołączył: 9.12.2008
Skąd: wroc

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


na jednym mam PHP Version 5.0.4 a na tym gdzie paser działa : PHP Version 5.2.6 .
Go to the top of the page
+Quote Post
wookieb
post
Post #18





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




Cytat
PHP 5 introduces Type Hinting. Functions are now able to force parameters to be objects (by specifying the name of the class in the function prototype) or arrays (since PHP 5.1). However, if NULL is used as the default parameter value, it will be allowed as an argument for any later call.
Go to the top of the page
+Quote Post
slewin
post
Post #19





Grupa: Zarejestrowani
Postów: 104
Pomógł: 7
Dołączył: 9.12.2008
Skąd: wroc

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


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 ?

Ten post edytował slewin 28.05.2009, 13:49:05
Go to the top of the page
+Quote Post
wookieb
post
Post #20





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




Przykładowy filtr
youtube.php
  1. <?php
  2. class bbcode_filter_youtube
  3. {
  4.  
  5.    public $tags = array(
  6.        'youtube'=>array(
  7.            'open'    =>    'youtube', // tak naprawde moze byc tutaj cokolwiek bo i tak potem to wywalimy
  8.            'close'    =>    'youtube',
  9.            'notallowed_childs'=>    'all', // zadnych innych tagow w srodku nie potrzebujemy
  10.            'parseBody'    =>    'checkMovie'
  11.        );
  12.    );
  13.  
  14.    //$tag - wszystkie informacje o tagu. W naszym przypadku to co powyzej
  15.    // $openNode - tag otwierajacy
  16.    // $body - lista elementow zawartych pomiedzy tagami
  17.    // $closeNode - tag zamykajacy
  18.    public function checkMovie($tag, &$openNode, &$body, &$closeNode)
  19.    {
  20.        // wyciagamy caly tekst
  21.        $bodyStr='';
  22.        foreach($body as $el) $bodyStr.=$el['text'];
  23.        
  24.        // sprawdzamy czy ciag jest urlem
  25.        $str=data_validator::checkUrl($bodyStr);
  26.        
  27.        if($str==false)
  28.        {
  29.            return false;
  30.        }
  31.        
  32.        
  33.        // tag zamykajacy nie jest nam potrzebny wiec usuwamy z niego sam tekst
  34.        $closeNode['text']='';
  35.        
  36.        
  37.        $openNode['text']=' tutaj wpisujemy kod odpowiadajacy za wyswietlenie filmiku youtube ';
  38.        
  39.    }
  40. }
  41. ?>


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



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

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


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

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

więc nic nie stoi na przeszkodzie, żeby to dorobić.

Ten post edytował wookieb 28.05.2009, 14:49:48
Go to the top of the page
+Quote Post
slewin
post
Post #21





Grupa: Zarejestrowani
Postów: 104
Pomógł: 7
Dołączył: 9.12.2008
Skąd: wroc

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


dzięki , już łapie o co chodzi (IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post
wookieb
post
Post #22





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




Wiec ten kod wstawiasz w miejsce
Kod
tutaj wpisujemy kod odpowiadajacy za wyswietlenie filmiku youtube

A url masz w $str.

Ten post edytował wookieb 28.05.2009, 15:13:07
Go to the top of the page
+Quote Post
slewin
post
Post #23





Grupa: Zarejestrowani
Postów: 104
Pomógł: 7
Dołączył: 9.12.2008
Skąd: wroc

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


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 .
Go to the top of the page
+Quote Post
wookieb
post
Post #24





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




Zacznijmy od tego, że raczej coś źle zrobiłeś bo mi nic nie ucinało.

Podsyłam cały filtr. Przyda się dla potomnych.
  1. <?php
  2. class bbcode_filter_youtube
  3. {
  4.  
  5.   public $tags = array(
  6.       'youtube'=>array(
  7.           'open'    =>    'youtube', // tak naprawde moze byc tutaj cokolwiek bo i tak potem to wywalimy
  8.           'close'    =>    'youtube',
  9.           'notallowed_childs'=>    'all', // zadnych innych tagow w srodku nie potrzebujemy
  10.           'parseBody'    =>    'checkMovie'
  11.       )
  12.   );
  13.  
  14.   //$tag - wszystkie informacje o tagu. W naszym przypadku to co powyzej
  15.   // $openNode - tag otwierajacy
  16.   // $body - lista elementow zawartych pomiedzy tagami
  17.   // $closeNode - tag zamykajacy
  18.    public function checkMovie($tag, &$openNode, &$body, &$closeNode)
  19.    {        
  20.        // wyciagamy caly tekst
  21.        $bodyStr='';
  22.        foreach($body as &$el)
  23.        {
  24.            $bodyStr.=$el['text'];
  25.            
  26.            // wersja do wyswietlenia
  27.            $el['text']='';
  28.        }
  29.      
  30.        // sprawdzamy czy ciag jest urlem
  31.        $str=data_validator::checkUrl($bodyStr);
  32.      
  33.        if($str==false)
  34.        {
  35.            $openNode=bb_code::removeNode($openNode);
  36.            $closeNode=bb_code::removeNode($closeNode);
  37.            return false;
  38.        }
  39.        
  40.        
  41.        // szukanie id filmu
  42.        if(preg_match('/watch?v=([a-zA-Z0-9_]+)/i', $str, $matches))
  43.        {
  44.            $idMovie=$matches[1];
  45.        }
  46.        else
  47.        {
  48.            $openNode=bb_code::removeNode($openNode);
  49.            $closeNode=bb_code::removeNode($closeNode);
  50.            return false;
  51.        }
  52.      
  53.        // zamkniecie nie jest nam potrzebne
  54.        $closeNode['text']='';
  55.        
  56.        // Ustawiamy content
  57.        $openNode['text']='<object width="425" height="344">
  58.    <param name="movie" value="http://www.youtube.com/v/'.$idMovie.'"></param>
  59.    <param name="allowFullScreen" value="true"></param>
  60.    <param name="allowscriptaccess" value="always"></param>
  61.    <embed src="http://www.youtube.com/v/'.$idMovie.'" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed>
  62. </object>';
  63.      
  64.       //ustawiamy link dla zaufanego bbcode
  65.       reset($body);
  66.       $body[key($body)]['tagText']=$str;
  67.   }
  68. }
  69. ?>
Go to the top of the page
+Quote Post
Fixer
post
Post #25





Grupa: Zarejestrowani
Postów: 123
Pomógł: 0
Dołączył: 24.10.2004
Skąd: TG

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


może się przyda:) http://hobix.com/textile/quick.html
Go to the top of the page
+Quote Post
Fafu
post
Post #26





Grupa: Zarejestrowani
Postów: 243
Pomógł: 33
Dołączył: 30.01.2008
Skąd: Wrocław

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


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

Ten post edytował Fafu 23.06.2009, 23:51:20
Go to the top of the page
+Quote Post
wookieb
post
Post #27





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




Oczywiście masz rację.
Poprawiłem cut_test.php wraz z małym bugiem który znalazłem.

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

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

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


Oczywiście w niektórych filtrach również występuje htmlspecialchars wiec wystarczy ze je przeszukasz i bedzie po kłopocie.
Szczerze mówiąc trochę nie rozumiem używania encji do kodowania polskich znaków, no ale jak tak robisz.

Ten post edytował wookieb 24.06.2009, 09:50:17
Go to the top of the page
+Quote Post
Fafu
post
Post #28





Grupa: Zarejestrowani
Postów: 243
Pomógł: 33
Dołączył: 30.01.2008
Skąd: Wrocław

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


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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
wookieb
post
Post #29





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




Tak aktualizowałem, pobierz nową paczkę (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Fafu
post
Post #30





Grupa: Zarejestrowani
Postów: 243
Pomógł: 33
Dołączył: 30.01.2008
Skąd: Wrocław

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


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
Go to the top of the page
+Quote Post
wookieb
post
Post #31





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




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
Go to the top of the page
+Quote Post
Fafu
post
Post #32





Grupa: Zarejestrowani
Postów: 243
Pomógł: 33
Dołączył: 30.01.2008
Skąd: Wrocław

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


No niestety, ściągałem kilka razy i nic. Ciągle te same błędy.

EDIT: już działa (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) chodziło o cache przeglądarki - pobierało mi poprzedni plik.
pozdrawiam

Ten post edytował Fafu 24.06.2009, 13:07:42
Go to the top of the page
+Quote Post
slewin
post
Post #33





Grupa: Zarejestrowani
Postów: 104
Pomógł: 7
Dołączył: 9.12.2008
Skąd: wroc

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


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 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
wookieb
post
Post #34





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




Nawet nie wiesz co to bbcode :/
http://bbcode.org/reference.php
Go to the top of the page
+Quote Post
mowgli91
post
Post #35





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 27.12.2008
Skąd: Szamotuły, Poznań

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


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ć ;/
Go to the top of the page
+Quote Post
MajareQ
post
Post #36





Grupa: Zarejestrowani
Postów: 382
Pomógł: 22
Dołączył: 21.05.2007
Skąd: Elbląg

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


Ja mam pytanko z całkiem innej sceny. Jaka jest licencja na używanie tej klasy?
Go to the top of the page
+Quote Post
wookieb
post
Post #37





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




Do własnego jak i komercyjnego użytku.
Nie znam się specjalnie na licencjach więc niech będzie BSD
Go to the top of the page
+Quote Post
lysiu
post
Post #38





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 22.09.2009
Skąd: śląsk

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


U mnie śmiga, że hej!

Narazie poprawiłem jeden błąd:


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


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


a jeszcze kilka jest, później popoprawiam.

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

(spoiler:)

Księga Gości!


(IMG:style_emoticons/default/biggrin.gif) jak dla mnie bomba! Wielkie dzięki za ten skrypt, samemu by mi się chyba nie chciało (IMG:style_emoticons/default/sad.gif)

edit: coś wam (forum) "spoiler" w bbcode cienko działa (IMG:style_emoticons/default/snitch.gif)

Ten post edytował lysiu 23.09.2009, 00:59:34
Go to the top of the page
+Quote Post
MajareQ
post
Post #39





Grupa: Zarejestrowani
Postów: 382
Pomógł: 22
Dołączył: 21.05.2007
Skąd: Elbląg

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


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?
Go to the top of the page
+Quote Post
wookieb
post
Post #40





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




Tak
Go to the top of the page
+Quote Post
lysiu
post
Post #41





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 22.09.2009
Skąd: śląsk

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


no i na przykład do img nie dodajesz alt i nie zamykasz znacznika /> to się też nie waliduje w strict

tak myślę, że przydała by się możliwość wyłączenia niektóych znaczników (bo teraz to nie wiem gdzie to zedytować?) i zamieniania nieznanych znaczników na '' (puste). np jak ktoś wpisze [ble]cos[/ble] -> cos (bez [])

Ten post edytował lysiu 23.09.2009, 12:02:13
Go to the top of the page
+Quote Post
wookieb
post
Post #42





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




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. }
Go to the top of the page
+Quote Post
Spawnm
post
Post #43





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




UPDATE PARSERA.
Wszystkie nowinki w pierwszym poście. http://forum.php.pl/index.php?showtopic=115269
Go to the top of the page
+Quote Post
c3zi
post
Post #44





Grupa: Zarejestrowani
Postów: 266
Pomógł: 20
Dołączył: 15.11.2006
Skąd: Koszalin

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


Wszystko fajnie wygląda. Brakuje tylko integracji z Kohaną ;-)
Go to the top of the page
+Quote Post
wookieb
post
Post #45





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




A co za problem zintegrować to samemu? A dlaczego phpmailer nie jest zintegrowany z kohana, albo z ZF? Integrujcie sobie gdzie chcecie.
Go to the top of the page
+Quote Post
c3zi
post
Post #46





Grupa: Zarejestrowani
Postów: 266
Pomógł: 20
Dołączył: 15.11.2006
Skąd: Koszalin

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


Swift jest zintegrowany w kohana.
Z tą integracją żartowałem. Fajnie napisana biblioteka (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
wookieb
post
Post #47





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




Pokaż jak zaimplementowałeś geshi.
Go to the top of the page
+Quote Post
c3zi
post
Post #48





Grupa: Zarejestrowani
Postów: 266
Pomógł: 20
Dołączył: 15.11.2006
Skąd: Koszalin

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


Mam dwa pytania.
1. Jest jakaś opcja dostarczenia do tego parsera listy dozwolonych tagów?
2. Jeśli istnieje taka lista to jak do pozostałych tagów dodawać spację np. użytkownik poda <nowy_tag>, chcę uzyskać < nowy_tag.
Chodzi o to, aby nie traktował błędnego tagu jako kod html.
Go to the top of the page
+Quote Post
wookieb
post
Post #49





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




1) A readme.html czytał?
2) Opcje leave_* opisane w manualu, dokumentacja BbCodeSettings również się kłania.
Go to the top of the page
+Quote Post
karol98
post
Post #50





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 12.10.2008

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


przyda się (IMG:style_emoticons/default/smile.gif)
użyję w swoim skrypcie
Go to the top of the page
+Quote Post
c3zi
post
Post #51





Grupa: Zarejestrowani
Postów: 266
Pomógł: 20
Dołączył: 15.11.2006
Skąd: Koszalin

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


Jeszcze jedno pytanie. Da się zrobić odwrotną konwersję, czyli html->bbcode ?
Go to the top of the page
+Quote Post
wookieb
post
Post #52





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




Tak da się tworząc filtry odwrotne. Aczkolwiek takiej możliwości jeszcze nie udostępniłem.
Go to the top of the page
+Quote Post
Zdunek
post
Post #53





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

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


nie wiem czy to tylko u mnie, czy znalazłem buga
jeśli w parsowanym kodzie jest link powiedzmy http://www.wp.pl/cos to przestaje działać dodawanie <br/> w znakach nowej linii (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
wookieb
post
Post #54





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




@Zdunek Poprawiłem błąd, Dzięki za info (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Zdunek
post
Post #55





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

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


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

no i znowu będę musiał integrować z Kohaną (IMG:style_emoticons/default/tongue.gif)
Jeśli możesz powiedzieć jakie linijki są do zmiany, będę bardzo wdzięczny
Go to the top of the page
+Quote Post
wookieb
post
Post #56





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




Linia 1233
Go to the top of the page
+Quote Post
Zdunek
post
Post #57





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

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


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/nin...3;/big-game.php
po !/ przestaje być linkiem

Edit:
przy autolinkowaniu nie działają także linki typu
http://www.radareklamy.org/uchwala,163.html
ucina przy przecinku

Ten post edytował Zdunek 5.11.2009, 21:51:13
Go to the top of the page
+Quote Post
wookieb
post
Post #58





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




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

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

Oczywiście + za doraźną pomoc (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Zdunek
post
Post #59





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

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


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

To ja dziękuję za parser (IMG:style_emoticons/default/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"

(IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
wookieb
post
Post #60





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




Przetestowałem link i jest ok. Proszę upewnij się czy na pewno masz poprawną wersję. Chodzi tylko o wyrażenia regularne więc mogło ci sie coś pomotać, albo coś nadpisałeś (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
Zdunek
post
Post #61





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

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


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ś (IMG:style_emoticons/default/smile.gif)

Jednak moja wina (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
wookieb
post
Post #62





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




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)
Go to the top of the page
+Quote Post
Zdunek
post
Post #63





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

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


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ć (IMG:style_emoticons/default/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. }


Ten post edytował Zdunek 24.11.2009, 17:42:34
Go to the top of the page
+Quote Post
wookieb
post
Post #64





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




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;

Go to the top of the page
+Quote Post
Zdunek
post
Post #65





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

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


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
Go to the top of the page
+Quote Post
wookieb
post
Post #66





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




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 )
Go to the top of the page
+Quote Post
Zdunek
post
Post #67





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

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


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

Ten post edytował Zdunek 25.11.2009, 20:07:36
Go to the top of the page
+Quote Post
wookieb
post
Post #68





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




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=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(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=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) 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.
Go to the top of the page
+Quote Post
Zdunek
post
Post #69





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

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


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 (IMG:style_emoticons/default/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ść

Ten post edytował Zdunek 25.11.2009, 23:16:45
Go to the top of the page
+Quote Post
wookieb
post
Post #70





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




Możesz. Przejrzyj zmienna $tag jaka dostajesz do funkcji i kombinuj (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Zdunek
post
Post #71





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

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


dzięki, udało się podczepić

chyba znalazłem następny błąd (IMG:style_emoticons/default/biggrin.gif)

f(x) \xrightarrow{T_{[1,5]}}g(x)
zmienia się w
f(x) \xrightarrow{T_{}}g(x)
Go to the top of the page
+Quote Post
wookieb
post
Post #72





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




Nie jest to błąd tylko ustawienie.
BbCodeSettings->removeNotAvailableTags
ustaw na false
Go to the top of the page
+Quote Post
Zdunek
post
Post #73





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

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


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

Ten post edytował Zdunek 26.11.2009, 21:06:33
Go to the top of the page
+Quote Post
wookieb
post
Post #74





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




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
Go to the top of the page
+Quote Post
Borys_
post
Post #75





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 1.12.2009

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


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ć?
Go to the top of the page
+Quote Post
wookieb
post
Post #76





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




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=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ć (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
tog
post
Post #77





Grupa: Zarejestrowani
Postów: 93
Pomógł: 4
Dołączył: 1.12.2009
Skąd: lublin

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


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 (IMG:style_emoticons/default/biggrin.gif)
nie wazne...

Ten post edytował tog 4.01.2010, 20:20:06
Go to the top of the page
+Quote Post
Zdunek
post
Post #78





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

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


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
Go to the top of the page
+Quote Post
wookieb
post
Post #79





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




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 )
Go to the top of the page
+Quote Post
Zdunek
post
Post #80





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

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


http://wklejasz.pl/t.txt (plik kodowany w utf-8)
i jak wrzuciłem zamiast > odpowiednik w kodzie, to nie ucięło tekstu
Go to the top of the page
+Quote Post
wookieb
post
Post #81





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




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.
Go to the top of the page
+Quote Post
Kamil Pietrzak
post
Post #82





Grupa: Zarejestrowani
Postów: 213
Pomógł: 10
Dołączył: 7.01.2010
Skąd: Lublin

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


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
Go to the top of the page
+Quote Post
Crozin
post
Post #83





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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).
Go to the top of the page
+Quote Post
wookieb
post
Post #84





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




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 font-weight 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. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  5. <meta http-equiv="Content-type" content="application/xhtml+xml; charset=iso-8859-2" />
  6. <title>Tytuł</title>
  7. <link rel="stylesheet" href=" [nazwa_arkusza_stylow.css] " type="text/css" />
  8. </head>
  9. <p>
  10. <span style="font-weight: bold">pogrubiony tekst</span>
  11. </p>
  12.  
  13. </body>
  14. </html>
  15.  

Semantycznie nie jest, aczkolwiek validator kod przepuszcza.
Go to the top of the page
+Quote Post
Kamil Pietrzak
post
Post #85





Grupa: Zarejestrowani
Postów: 213
Pomógł: 10
Dołączył: 7.01.2010
Skąd: Lublin

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


jestem za bardzo pro zeby pisac byle BB (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
GyniO
post
Post #86





Grupa: Zarejestrowani
Postów: 53
Pomógł: 3
Dołączył: 8.02.2010

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


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?
Go to the top of the page
+Quote Post
wookieb
post
Post #87





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




Oczywiście, że jest i oczywiście, że wszystko jest opisane w readme
Go to the top of the page
+Quote Post
kallosz
post
Post #88





Grupa: Zarejestrowani
Postów: 272
Pomógł: 19
Dołączył: 29.07.2006

Ostrzeżenie: (10%)
X----


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ć
Go to the top of the page
+Quote Post
GyniO
post
Post #89





Grupa: Zarejestrowani
Postów: 53
Pomógł: 3
Dołączył: 8.02.2010

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


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

Już sobie z tym poradziłem.
Dzięki.
Go to the top of the page
+Quote Post
lobopol
post
Post #90





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

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


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 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 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 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 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 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 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ń
Go to the top of the page
+Quote Post
wookieb
post
Post #91





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




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/'
Go to the top of the page
+Quote Post
lobopol
post
Post #92





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

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


Wielkie dzięki już wszystko dobrze działa.
Go to the top of the page
+Quote Post
kenobi13
post
Post #93





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 13.07.2009
Skąd: Ziemia

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


Zauważyłem drobny błąd chyba.
W linijce 51 w pliku youtube.php jest:
  1. $idMovie = htmlspecialchars($str);

a powinno być:
  1. $idMovie = 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?
Go to the top of the page
+Quote Post
LapKom
post
Post #94





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 15.04.2007

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


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.
Go to the top of the page
+Quote Post
wookieb
post
Post #95





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




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 = htmlspecialchars($str);

a powinno być:
  1. $idMovie = 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.
Go to the top of the page
+Quote Post
LapKom
post
Post #96





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 15.04.2007

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


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. (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
wookieb
post
Post #97





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




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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif)
Mała pomoc:
  1.  
  2. public $tags=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.
Go to the top of the page
+Quote Post
LapKom
post
Post #98





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 15.04.2007

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


  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=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(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'] = str_replace('ul','ol',$openNode['text']);
  65. $closeNode['text'] = 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. (IMG:style_emoticons/default/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. var_dump($el);
  3. }

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

Jakaś wskazówka na skutecznego fixa? (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
wookieb
post
Post #99





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




Ściągnij parser i skopiuj plik BbCode.class.php . Wczoraj to zrobiłem, poniewaz faktycznie parser blokował tego typu tagi.
Go to the top of the page
+Quote Post
GyniO
post
Post #100





Grupa: Zarejestrowani
Postów: 53
Pomógł: 3
Dołączył: 8.02.2010

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


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. <p>
  2. tresc
  3. <ul>
  4. <li>Internet Explorer,</li>
  5. <li>Firefox 3.0,</li>...</li>
  6. </ul>
  7. </p>


Ten post edytował GyniO 16.05.2010, 16:00:17
Go to the top of the page
+Quote Post

12 Stron V   1 2 3 > » 
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 09:09