![]() |
Suche BBCode-Klasse für PHP
Hi zusammen,
könnt ihr mir eine BBCode-Klasse für PHP empfehlen? Bisher nutzte ich etwas eigenes, aber eine gute Klasse ermöglicht neben dem Parsen das einfache Hinzufügen weiterer BBCodes mit Callback-Funktionen, Validierung etc. ![]() Vielleicht hat jemand von euch einen Geheimtipp. Grüße, Matze Edit: Tippfehler im Titel beseitigt. |
Re: Suche BBCode-Klassefür PHP
Ich würde allgemein den TinyMCE vorschlagen :zwinker: Ist zwar keine direkte Antwort auf deine Frage, aber der macht das leben viel einfacher und man braucht eigentlich nichts mehr zu parsen.
|
Re: Suche BBCode-Klassefür PHP
Nein, wer länger mit TinyMCE arbeitet merkt, wie schlecht es ist. Nach dem Motto: Außen hui, innen pfui.
Ich möchte darüber nicht diskutieren, aber wer auf erweiterbaren und zukunftssicheren Code wert legt, für den ist TinyMCE die einzige Katastrophe. Ich möchte nach wie vor einen BBCode-Parser. |
Re: Suche BBCode-Klasse für PHP
Hallo,
ich kenne deine PHP Kenntnisse nicht Matze, aber aus eigener Erfahrung kann ich sagen, dass das Parsen von BB-Code nicht wirklich schwer ist. Daraus eine erweiterbare Klasse zu schreiben ist auch kein großes Ding mehr. Wie hast du deine BB-Codes denn bisher geparst? Mit Regular Expressions gehts das ganz wunderbar. Und wenn dein System die Daten cached wie es sich gehört, dann stört die Geschwindigkeit auch nicht mehr. :-) Liebe Grüße, Valle |
Re: Suche BBCode-Klasse für PHP
Hallo Valle,
ja, ich nutzte reguläre Ausdrücke. Das Parsen selbst ist auch nicht das Problem. Ich zeige dir mal ein Beispiel, was die verlinkte Klasse kann:
Code:
Ganz grob, was man da einstellen kann:
$bcode->addCode('new_tag', 'usecontent?', 'do_bbcode_tag', array(), 'inline', array('listitem', 'block', 'inline'), array ());
Den BBCode-Tag, wie geparst werden soll (eingeschlossene BBCodes parsern), wie der BBCode aufgebaut ist ([tag][/tag] und/oder [tag=...][/tag]), eine Callback-Funktion fürs Ersetzen. Der Typ muss angegeben werden (block, inline, ...) und dann kann festgelegt werden, welcher Code in welchem enthalten sein darf (block in inline, ...). Das gefällt mir wirklich gut. Nur das alles umzusetzen ist schon aufwändiger. ;) Ich Cache alles. Meine Website funktioniert daher selbst ohne Verbindung zur Datenbank halbwegs. *g* Dennoch sollten BBCodes leicht zu verwalten sein. Grüße, Matze |
Re: Suche BBCode-Klasse für PHP
Mh okay, ich kann ja auch verstehen dass man da keine Lust zu hat. Ich bin da eher so neugierig wie das alles geht, dass ich meist direkt alles selbst implementiere. Aber man soll das Rad ja nicht neu erfinden, stimmt schon. :-)
Ich habe mal eine Zeit lang mit dem Zend Framework gearbeitet. Die haben eine sehr gute Umsetzung ihrer Klassen und bieten eine richtig durchdachte OOP Struktur. Es gibt in diesem Framework eine Klasse namens ![]() Liebe Grüße, Valle |
Re: Suche BBCode-Klasse für PHP
Normalerweise sehe ich es wie du. Ich habe nur keine Woche Zeit, so eine umfangreiche Klasse zu schreiben. ;)
Ein ganzes Framework für die eher "simple" Aufgabe zu nutzen, halte ich jedoch dann doch für leicht übertrieben. Das wäre etwas anderes, wenn ich Zend sowieso einsetzen würde. Grüße, Matze |
Re: Suche BBCode-Klasse für PHP
Zitat:
Man kann das Zend_Markup (evtl. mit 1-2 anderen Klassen) einfach extrahieren. ;-) Liebe Grüße, Valle |
Re: Suche BBCode-Klasse für PHP
Zitat:
Kennen tu ich keinen fertigen. Hast du die üblichen Verdächtigen wie ![]() ![]() |
Re: Suche BBCode-Klasse für PHP
@Valle: Hm ok, aber ein Framework möchte ich dennoch nicht nutzen.
@Philip: Ja, habe ich. Ich würde mich auch mit einem brauchbaren Grundgerüst zufrieden geben, das mir einen geparsten Baum erstellt und auch die Möglichkeit bietet, BBCodes innerhalb bestimmter Tags auszuschließen (innerhalb von [code] nichts parsen bsp.). Das hat mit den regulären Ausdrücken und der Verschachtelung bei mir nur bedingt funktioniert. Vielleicht genau aus dem Grund, den du genannt hast (dass es nicht geht). |
Re: Suche BBCode-Klasse für PHP
Moin Matze,
Zitat:
Guck dir bei der Gelegenheit auch die ![]() Ansonsten kann ich dir allerhoechstens das BBCodde-System von phpBB empfehlen - allerdings steht diese Klasse unter der GPL und ist ausserdem etwas schlimmer rauszuziehn. Greetz alcaeus |
Re: Suche BBCode-Klasse für PHP
Überredet, ich schaue mal, ob ich damit etwas anfangen kann. :stupid:
|
Re: Suche BBCode-Klasse für PHP
@NamenLozer:
Mh, also ich habe auf meiner Webseite alle BB-Codes mittels Regular Expressions geparst. Ich habe damit keine Probleme oder Sicherheitlücken. Der Code ist zwar schon etwas älter, aber er funktioniert recht gut. Es kann gut sein, dass mein BB-Code nicht ganz so umfangreich ist, wie den auf den du dich beziehst. Aber für Zitate, Code-Abschnitte und einfachen Inline-Markups wie Kursivschrift reicht es auf jeden Fall. Kannst du mir vielleicht mit einem kleinem BB-Code Beispiel erläutern, wo genau sich das Problem befindet? Würde mich gerne damit beschäftigen. :-) Liebe Grüße, Valle |
Re: Suche BBCode-Klasse für PHP
@Valle:
Ein konkretes beispiel habe ich nicht, zumal ich ja deine Implementierung nicht kenne, aber versuch einfach mal, verschiedene BBCode-Tags ungünstig zu verschachteln. Die Wahrscheinlichkeit, dass du dir zumindest dein Layout damit zerschießt, ist recht groß. Sogar in großen Foren gibt es gelegentlich dieses Problem - ich erinnere mich an ein Forum, wo ich früher aktiv war, welches auf WBB2 basierte. Dort gab es einen "Spam"-Bereich, in dem wir uns öfters einen Spaß daraus gemacht haben, das Layout durch ungültig verschachtelte BBCodes zu zerschießen. Dabei ist das WBB sogar eine professionelle Software, die sogar Geld kostet. Aber selbst wenn dein Layout nicht gleich kaputt gehen sollte, erzeugst du zumindest invaliden (X)HTML-Code. |
Re: Suche BBCode-Klasse für PHP
Zend hat einen riesigen Overhead. Das ist alles andere als Standalone.
|
Re: Suche BBCode-Klasse für PHP
Ich nutze
![]() |
Re: Suche BBCode-Klasse für PHP
Das schaue ich mir an, danke. :)
Edit: ganz wohl ist mir nicht, wenn ich solche RegEx darin sehe. :shock:
Code:
if (preg_match("/^
(?:https?|ftp):\\/\\/ (?: (?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+ [a-zA-Z0-9] (?:[a-zA-Z0-9-]*[a-zA-Z0-9])? | \\[ (?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3} (?: 25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-zA-Z0-9-]*[a-zA-Z0-9]: (?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21-\\x5A\\x53-\\x7F] |\\\\[\\x01-\\x09\\x0B\\x0C\\x0E-\\x7F])+ ) \\] ) (?::[0-9]{1,5})? (?:[\\/\\?\\#][^\\n\\r]*)? $/Dx", $string)) return true; // ... $output = preg_split("/( (?: (?:https?|ftp) : \\/* (?: (?: (?: [a-zA-Z0-9-]{2,} \\. )+ (?: arpa | com | org | net | edu | gov | mil | int | [a-z]{2} | aero | biz | coop | info | museum | name | pro | example | invalid | localhost | test | local | onion | swift ) ) | (?: [0-9]{1,3} \\. [0-9]{1,3} \\. [0-9]{1,3} \\. [0-9]{1,3} ) | (?: [0-9A-Fa-f:]+ : [0-9A-Fa-f]{1,4} ) ) (?: : [0-9]+ )? (?! [a-zA-Z0-9.:-] ) (?: \\/ [^&?#\\(\\)\\[\\]\\{\\}<>\\'\\\"\\x00-\\x20\\x7F-\\xFF]* )? (?: [?#] [^\\(\\)\\[\\]\\{\\}<>\\'\\\"\\x00-\\x20\\x7F-\\xFF]+ )? ) | (?: (?: (?: (?: [a-zA-Z0-9-]{2,} \\. )+ (?: arpa | com | org | net | edu | gov | mil | int | [a-z]{2} | aero | biz | coop | info | museum | name | pro | example | invalid | localhost | test | local | onion | swift ) ) | (?: [0-9]{1,3} \\. [0-9]{1,3} \\. [0-9]{1,3} \\. [0-9]{1,3} ) ) (?: : [0-9]+ )? (?! [a-zA-Z0-9.:-] ) (?: \\/ [^&?#\\(\\)\\[\\]\\{\\}<>\\'\\\"\\x00-\\x20\\x7F-\\xFF]* )? (?: [?#] [^\\(\\)\\[\\]\\{\\}<>\\'\\\"\\x00-\\x20\\x7F-\\xFF]+ )? ) | (?: [a-zA-Z0-9._-]{2,} @ (?: (?: (?: [a-zA-Z0-9-]{2,} \\. )+ (?: arpa | com | org | net | edu | gov | mil | int | [a-z]{2} | aero | biz | coop | info | museum | name | pro | example | invalid | localhost | test | local | onion | swift ) ) | (?: [0-9]{1,3} \\. [0-9]{1,3} \\. [0-9]{1,3} \\. [0-9]{1,3} ) ) ) )/Dx", $string, -1, PREG_SPLIT_DELIM_CAPTURE); |
Re: Suche BBCode-Klasse für PHP
Das geht ja noch ... du willst nich wissen, wie eine RegEx für alle möglichen laut Spec erlaubten URLs aussieht. :lol:
|
Re: Suche BBCode-Klasse für PHP
Naja, dafür ist die Klasse ganz sauber geschrieben. ;)
Insofern... Kann mans ja mal probieren. ;) Zumal ja auch HTML-Input gefiltert wird. |
Re: Suche BBCode-Klasse für PHP
Bisher macht sie einen sehr guten Eindruck, muss ich sagen. :thumb: Nur 140 KB PHP-Code ist recht viel, aber das wird der Server schon verkraften können. *g*
Das einzige, was ich in der Klasse selbst ändern musste war das Rausschmeißen sämtlicher vordefinierter Codes. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz