UBB class (zeer uitgebreid)

Door Hipska BE, 15 jaar geleden, 6.321x bekeken

UBB class moet je gewoon 1 keer aanroepen om de instelling te maken en nadien met een methode aanroepen.

Het genereerd een heleboel UBB code's allemaal in XHTML gevalideerde code.
Maakt Thumbnails van images en presenteert ze in lightbox 2

Voor de Thumbnails moet de LibGD extentie geïnstalleerd zijn.
Een download voor het script vind je hier:
UBB.zip (md5 = fe8e93be3b32cc563e7a6597cff81e9c)

Edit:
versie 1.1 : enkele kleine foutjes eruit gehaald + vervanger voor eval();

Voorbeeld: http://casteleyn.no-ip.info:8080/~Hipska/Extra/classes/UBB/t

Gesponsorde koppelingen

PHP script bestanden

  1. ubb-class-zeer-uitgebreid

 

Er zijn 46 reacties op 'Ubb class zeer uitgebreid'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Marvin S
Marvin S
15 jaar geleden
 
0 +1 -0 -1
woooow
als ik morgen wakker wordt ga ik dit is ff doorkijken..
teveel voor nu haha:D
ziet er wel al netjes uit kwa programmeren
Dutch Caffeine
Dutch Caffeine
15 jaar geleden
 
0 +1 -0 -1
Hoe moet ik de boel installeren. Heb gebrobeerd volgens het voorbeeld. Maar het werkt niet! Iemand een suggestie?
code van het voorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
include('class.ubb.php');

$tags = array();
$text = 'Tekst met ubb code';

$ubb = new ubb('ignore','html','opmaak','url','img','quote');

echo $ubb->parse_all($text); // deze functie doet alle ubb code's
// of :

echo $ubb->parse($text, $tags); // deze functie doet enkel de code's die jij wil
?>

Mijn code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
include("class.ubb.php");
$tags = array();



           $query = "SELECT * FROM gastenboek ORDER BY id DESC";
        $result = mysql("lexsoftwar_forumdb", $query);
        $total = mysql_num_rows($result);
        $result = mysql("lexsoftwar_forumdb", $query);
        while ($row=mysql_fetch_array($result)) {
        $id = $row[id];
        $naam = $row[naam];
        $bericht = $row[bericht];
        $ubb = new ubb('ignore','html','opmaak','url','img','quote');
echo '
 <tr>
    <td width="104" height="47" valign="top" class="naam"><p>U Naam: '
.$naam.'</p></td>
    <td width="351" valign="top" class="berichtcontent">'
.$bericht.'</td> </tr> ';
    //Hoe moet ik de bbcodes installeren, begrijp er geen snars van!
?>
Hipska BE
Hipska BE
15 jaar geleden
 
0 +1 -0 -1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
include("class.ubb.php");
$tags = array();  // dit heb je enkel nodig als je bepaalde tags niet wil laten parsen!
$ubb = new ubb();


           $query = "SELECT * FROM gastenboek ORDER BY id DESC";
        $result = mysql("lexsoftwar_forumdb", $query);
        $total = mysql_num_rows($result);
        $result = mysql("lexsoftwar_forumdb", $query);
        while ($row=mysql_fetch_array($result)) {
        $id = $row[id];
        $naam = $row[naam];
        $bericht = $row[bericht];
      
echo '
 <tr>
    <td width="104" height="47" valign="top" class="naam"><p>U Naam: '
.$naam.'</p></td>
    <td width="351" valign="top" class="berichtcontent">'
.$ubb->parse_all($bericht).'</td> </tr> ';
    //Zo moet dit ;)!
?>

Edit:
Het was gisterenavond blijkbaar wat te laat, ik heb het voorbeeldje aangepast, want er zat een fout in.
Bas Kreleger
Bas Kreleger
15 jaar geleden
 
Ziet er erg netjes uit Hipska! Mijn complimenten :) Misschien is deze parser ook wel wat voor de nieuwe PHPhulp!
Vincent
Vincent
15 jaar geleden
 
0 +1 -0 -1
Ziet er goed uit!
Het mooie is ook nog dat er veel vraag naar dit is!
10+!
Michael Voeten
Michael Voeten
15 jaar geleden
 
0 +1 -0 -1
Dit is een mooi script
Rudie dirkx
rudie dirkx
15 jaar geleden
 
0 +1 -0 -1
Je gebruikt eval. Is niet nodig. Weet niet of het kwaad kan in dit geval, maar het kan netter.
Jouw code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

foreach ($tags as $tag)
{

    if(method_exists($this, 'ubb_'.$tag)) eval('$this->ubb_'.$tag.'();');
}


?>


Het kan ook zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

foreach ( $tags AS $tag )
{

    $hook = array($this, 'ubb_'.$tag);
    if ( is_callable($hook) ) call_user_func($hook);
}


?>


Volgens mij zo :) Anders moet je ff kijken naar http://www.php.net/call_user_func

Edit:
Vind het aap slaat mens verhaal erg indrukwekkend :)
Dutch Caffeine
Dutch Caffeine
15 jaar geleden
 
0 +1 -0 -1
@Hipska

Het werkt even goed niet.

Iemand..
GaMer B
GaMer B
15 jaar geleden
 
0 +1 -0 -1
Erg goed scriptje.
Dutch Caffeine
Dutch Caffeine
15 jaar geleden
 
0 +1 -0 -1
Ja, het zal wel een goed script zijn maar:

Het invoegen in je eigen script werkt niet. Ik heb al veel geprobeerd en het werkt niet!
Edit:

Het werkt!!!!!! Was vergeten de js en de css er in te zetten, stomme fout.

Excuus hier voor, het licht aan mij!
K i p
K i p
15 jaar geleden
 
0 +1 -0 -1
Dit is misschien ook leuk om erin te verwerken: http://www.phphulp.nl/imgs/icons/selectall.gif Je weet wel wat ik bedoel :-) Dat knopje om de hele code te selecteren.
Dutch Caffeine
Dutch Caffeine
15 jaar geleden
 
0 +1 -0 -1
Smilies werken niet! Weet iemand hoe je dat moet verwerken?
Hipska BE
Hipska BE
15 jaar geleden
 
0 +1 -0 -1
misschien eens het zipje downloaden en alles doen zoals in test.php ;-) dan werkt alles
Rudie dirkx
rudie dirkx
15 jaar geleden
 
0 +1 -0 -1
Op mn localhost PHP5 werkt het wel, op mn server PHP4 niet..:
http://jouwmoeder.nl/projects/PHPHulp/ubb_parser_class/example.php en http://jouwmoeder.nl/projects/PHPHulp/ubb_parser_class/example.php?source voor hoe het is gedaan.
Heb een aangepaste class gebruikt: http://jouwmoeder.nl/projects/PHPHulp/ubb_parser_class/inc.cls.ubb.php?source
Beetje meer mijn stijl.

Maar iets raars werkt er niet. Heeft ie iets van PHP5 nodig dat niet in PHP4 zit maar dat geen error geeft??
Dutch Caffeine
Dutch Caffeine
15 jaar geleden
 
0 +1 -0 -1
Hipska:
misschien eens het zipje downloaden en alles doen zoals in test.php ;-) dan werkt alles

Ik heb het zipje ook gedownload, maar het werkt niet.
Kijk maar
Klikertje
Dutch Caffeine
Dutch Caffeine
15 jaar geleden
 
0 +1 -0 -1
En waar kan ik dit vandaan halen:
Voor de Thumbnails moet de LibGD extentie geïnstalleerd zijn.

Waarvoor moet ik dit md5 gebruiken:
(md5 = bf1daf49364b67356b253aedfce4906a)
Hipska BE
Hipska BE
15 jaar geleden
 
0 +1 -0 -1
@Alex: je hebt toch toevallig deze regeltjes niet gewist in je code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
<?php error_reporting(E_ALL);
define('INCLUDES','./'); ?>


@Cervetti: Als je een class helemaal aanpast kan ik je spijtig genoeg niet helpen als het niet werkt. Open hiervoor een topic. En een classe hoort niets te echo'en zomaar zonder het gevraagd is, en zeker al niet in de constructor.
Leroy Boerefijn
Leroy Boerefijn
15 jaar geleden
 
0 +1 -0 -1
vet gedaan :)
en idd lekker uitgebreid :P
Niek s
niek s
15 jaar geleden
 
0 +1 -0 -1
Kjik, hier zaten we in het IRC kanaal al lang op te wachten! Ik zie dat de spoiler goed is gelukt?! :) Thnq Hipska! werkt goed! :D
Katjan
katjan
15 jaar geleden
 
0 +1 -0 -1
ai, wel meteen een paar xss mogelijkheden..

1) je checkt niet altijd voor a-z0-9 bij een tekst in "" of '',
als nu de encoding perongeluk/expres op utf-8 staat ben je de sjaak.

2) stel je voor dat je een script hebt draaien, genaamd ban.php.
ban haalt zijn data uit een get parameter. http://yoursite/ban.php?user=huib zal huib bannen zodra jij dit plaatje ziet.

3)
align, size idem

heb nog niet verder gekeken, maar zijn vast en zeker nog meer gaten te ontdekken;)

Huib
Hipska BE
Hipska BE
15 jaar geleden
 
0 +1 -0 -1
@huib:
1) hier op mijn server is alles utf-8, wat zou het probleem dan moeten zijn?

2) zo'n script heb ik zeker nooit draaien (altijd met POST en met id) en dat is toch vooral het probleem voor diegene die het ban.php script heeft gemaakt. en dan zal het enkel nog effect hebben als een admin die 'image' bekeken heeft. met file_get_contents kan je tog geen _GET uitvoeren op een bestand trouwens?

3) bij align is het enkel A-Z en bij size oftewel 1 cijfer of ook a-z. +daarbij is het aantal karakters ook nog gelimiteerd.

Wil je even in een PM zetten wat de preciese fouten hiervan dan zijn?
Niek s
niek s
15 jaar geleden
 
0 +1 -0 -1
@huib:

maar als je dan [img]http://www.ontvoerjeleraar.nl/video/stemmen.php?vid=101[/img] doet op een andere website, heb je dat ook. Maakt niet uit welke site, dit soort dingen zullen altijd blijven natuurlijk. Tenzij je je UBB parser zo maakt dattie meteen kijkt of het ook echt wel een plaatje is.
Jelmer -
Jelmer -
15 jaar geleden
 
0 +1 -0 -1
Kleinigheidje zoals Vercetti ook al noemde:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
                eval('$this->'.$method.'();');

Kan ook gewoon
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
                $this->$method();

Geen call_user_func of eval nodig in PHP hiervoor :)

Huib: dat is niet op een goede manier op te lossen vanuit de parser. De beste oplossing is gewoon altijd GET methode gebruiken voor het opvragen van data, en POST voor het versturen van data (en dus in dit geval het commando om iemand te bannen)
Niek s
niek s
15 jaar geleden
 
0 +1 -0 -1
Jelmer: dan nog kan het.
Als iemand dan zijn plaatje laat doorverwijzen naar een bestand op zijn host, die dan op zijn beurt weer een formulier submit...

moet ik wel bij zeggen dat je een slechte programmeur bent als je een website maakt die dat allemaal toelaat.
Rudie dirkx
rudie dirkx
15 jaar geleden
 
0 +1 -0 -1
Quote:
moet ik wel bij zeggen dat je een slechte programmeur bent als je een website maakt die dat allemaal toelaat.

Er is zo weinig dat je er aan kan doen... Een extern formulier stoppen is vervelend. En vooral niet aan te raden.
De ubb goed 'beveiligen' is natuurlijk een mogelijkheid. Ik zorg in mijn ubb codes gewoon dat er niet teveel mogelijk is. Niet teveel opties, niet teveel attributen. Zodat er geen mogelijkheden zijn om stoute dingen te doen.
Als je 100% veiligheid wilt moet je gewoon plain text gaan printen. Geen sessions, geen cookies, geen webbrowser, etc.
Je weet wat ze zeggen he: gebruikersvriendelijkheid VS veiligheid
Peter Wessels
Peter Wessels
15 jaar geleden
 
0 +1 -0 -1
Kun je ook een ubb toevoegen voor een filmpje?
Bijvoorbeeld:
[video=http://www.youtube.com/v/U_Wo5_LwYeY][/video]

Word dan:
<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/U_Wo5_LwYeY"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/U_Wo5_LwYeY" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object>
K i p
K i p
15 jaar geleden
 
0 +1 -0 -1
Ja
Jelmer -
Jelmer -
15 jaar geleden
 
0 +1 -0 -1
Ga dan voor de [video]http://www.youtube.com/v/U_Wo5_LwYeY[/video] variant. Dat lijkt mij persoonlijk een logischere oplossing.
Peter Wessels
Peter Wessels
15 jaar geleden
 
0 +1 -0 -1
Ja is wel goed alleen dan moeten we die code nog wel hebben.
Jelmer -
Jelmer -
15 jaar geleden
 
0 +1 -0 -1
Gewoon die van img in het script kopiëren en aanpassen naar eigen smaak?
Katjan
katjan
15 jaar geleden
 
0 +1 -0 -1
@huib (A)

laatste voorbeeld ongelukkig gekozen,
color is vatbaar, de andere twee niet..
style="color: expression(/"alert('xss')/");"

ban.php was meer bedoeld als algehele waarschuwing voor het gebruik van POST bij het zetten van waarde, vooral omdat zonder ubb dit niet zo heel veel uitmaakt. (kunnen mensen toch geen plaatjes posten etc)

utf-8 is een hele slechte encoding, qua veiligheid dan..
(voor de geinteresseerden): http://ha.ckers.org/blog/20060817/variable-width-encoding/

Huib

edit: stomme ubb tags, phphulp gebruikt ze natuurlijk ook;)
als er ergens in mijn reactie een regel mist, dan komt het daardoor..
Peter Wessels
Peter Wessels
15 jaar geleden
 
0 +1 -0 -1
BIj mij krijg ik de foto's niet te zien:
http://img218.imageshack.us/img218/7856/halllowc0.jpg
Menno
menno
15 jaar geleden
 
0 +1 -0 -1
ik ook niet :S
Hipska BE
Hipska BE
15 jaar geleden
 
0 +1 -0 -1
@Peter en menno: hebben jullie LibGD wel geïnstalleerd?
Raymond ---
Raymond ---
15 jaar geleden
 
0 +1 -0 -1
Bij mij loopt hij vast zodra ik meer dan 2 quotes in elkaar nest. Ik ga nu zelf even kijken of ik dat kan oplossen, mocht jij een oplossing hebben hoor ik het graag.
Joeri
Joeri
15 jaar geleden
 
0 +1 -0 -1
Wat een zeer mooie UBB-parser class. Mijn felicitaties.
Hipska BE
Hipska BE
15 jaar geleden
 
0 +1 -0 -1
bedankt Joeri ;-)
Bas Kreleger
Bas Kreleger
15 jaar geleden
 
0 +1 -0 -1
Geweldige UBB parser! Zocht er ééntje en heb deze nu in gebruik :). Enige wat ik anders heb is de smilies maar verder erg goede class! Bedankt!

Dat lightbox scriptje voor de Wrong image
Marco PHPJunky
Marco PHPJunky
15 jaar geleden
 
0 +1 -0 -1
Cool Script!!
Mebus  Hackintosh
Mebus Hackintosh
14 jaar geleden
 
0 +1 -0 -1
Zeker mooi gemaakt en zeer compleet! Ik ga hem zeker gebruiken voor m'n website:-)
- -
- -
14 jaar geleden
 
0 +1 -0 -1
Leuk dingetje Hipska, maar als ik een numerieke waarde tussen ignore-tags zet gaat het fout.
Johan K
Johan K
14 jaar geleden
 
0 +1 -0 -1
Er zitten nog al wat fouten in zeg, het is jammer dat ik deze class helemaal heb omgebouwd anders zou ik een paar punten aan kunnen wijzen.

Hoewel de aangepaste bijna niets meer weg heb van deze class heb ik 2 dingen niet aangeraakt.
Spoiler is daar 1 van, en daar zit een bij deze nog een foutje.

[spoiler=test]Dit is de div die op alle bij de knoppen word gebruikt.[/spoiler]
[spoiler=test]Dat is op te lossen door..[/spoiler]

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
        $microtime
= microtime( false );
        $this->text = preg_replace('#\[spoiler=(.+?)\](.+?)\[/spoiler\]#sie',"'<input type=\"button\" value=\"\\1\" onclick=\"javascript:ShowHide(\'spoil_'.md5('\\$microtime').'\');\" /><div class=\"Block\"><div id=\"spoil_'.md5('\\$microtime').'\" class=\"spoiler\">'.stripslashes('\\2').'</div></div>'",$this->text);
?>


Het foutje komt door dat md5( 'test' ) het zelfde is als md5( 'test' ).
Microtime kan bijna niet hetzelfde zijn, ligt een beetje aan de cpu, maar zelfs onder elkaar hebben ze niet de zeflde waarde.
Martin Meijer
Martin Meijer
14 jaar geleden
 
0 +1 -0 -1
Het is een erg mooi script, alleen jammer dat het zeer gevoelig is met hoe de content gebruikt wordt binnen de tags

Met een Quote mogen geen spaties in het begin staan en moet er gelijk een BR in zodat j ehet als volgt hebt

Quote:
hier tekst
Quote:

Anders doet deze het niet

Dit verhaal gaat ook ongeveer zo op met de Images ;)

Wij vinden het jammer dat het niet helemaal 100% functioneerd, want het is een onwijs gaaf script.
Hipska BE
Hipska BE
14 jaar geleden
 
0 +1 -0 -1
Als je aanpassingen gemaakt hebt die de fouten oplossen, mag je die altijd eens opsturen hoor, zal de aanpassingen doorvoeren zodat iedereen er baat aan heeft..
Steef
Steef
14 jaar geleden
 
0 +1 -0 -1
Als ik de ignore functie gebruik voor emoticons, dan zegt ie na 10 emoticons dat ie ze niet meer wilt negeren. Dus de 1e 10 gaan goed, alleen daarna gaat ie zeggen

[*ignore]10[/ignore]
[*ignore]11[/ignore]
enz...
(zonder het * dan wel ;)

Weet iemand wat hier het probleem is? Ik heb voor de rest niets veranderd aan de parser
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Tom Moros
Tom Moros
13 jaar geleden
 
0 +1 -0 -1
het hebben van meerdere quotes en de gevoeligheid verwijderen (spaties br's) heb ik als volgt gedaan ==>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
preg_match_all('#\[quote=(.*?)\](.*?)\[/quote\]#s', $text, $matches);
foreach ( $matches as $key => $val ){
            $this->text = preg_replace('#\[quote\](.+?)\[/quote\]#si','<div class="Block"><small>Quote :</small><div class="Quote">\\1</div></div>',$this->text);
            $this->text = preg_replace('#\[quote=(.+?)\](.+?)\[/quote\]#si','<div class="Block"><small>Quote : <b>\\1</b></small><div class="Quote">\\2</div></div>',$this->text);
        }
?>


dus rond de replace een controle op alle quote-tags en deze dus veranderen zolang er zijn.

hopelijk werkt dit voor jullie

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. ubb-class-zeer-uitgebreid

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.