Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

Eigene BB-Code Funktion; reihenfolge macht code kaputt

hi,

ich habe einen code im internet gefunden, mit dem man bb-codes in html tags umwandeln kann... also wie hier im forum. So sieht der code aus:

Code:                   In Zwischenablage kopieren (nur IE)
1">

Funktioniert eigentlich super... jetzt hab ich aber n problem, wenn ich mehrere BB-Tags hintereinander hänge. Schreibe ich z.b. diesen text...
Code:                   In Zwischenablage kopieren (nur IE)
2">

kommt das raus (die punkte müsst ihr euch wegdenken):

Zitat:
lalala [b.]test[/b.] jo
tausche ich jetzt die tags, das es so aussieht:

Code:                   In Zwischenablage kopieren (nur IE)
3">

dann mach er den text fett und unterstrichen, so wie er es soll:

Zitat:
lalala test jo
tausche ich jetzt die tags, das es so aussieht:

Das problem ist also das, das die reihenfolge der tags ne rolle spielt, und das will ich verhindern, also egal welcher tag zuerst.


danke für eure hilfe
Hier gehts zum Orginal Eintrag "Eigene BB-Code Funktion; reihenfolge macht code kaputt" im Forum

Antworten

Du hast da einen alten Haufen Müll gefunden. Die eregi Funktionen sind alt und langsam, neuer sind die preg_ Funktionen. Aber BBCode lässt sich nicht nur mit Regulären Ausdrücken realisieren, da braucht es schon mehr:

http://www.christian-seiler.de/projekte/php/bbcode/


2.

Das muss doch auch so gehen... ich habe leider fast keinen plan von RegExen, daher weiß ich net was ich da rein schreiben soll, aber meiner meinung nach gehört da in das pattern nur ein befehlt, das er auch eckige klammern akzeptiert.


3.

Wieso sind die Leute in letzter Zeit so sturr. Selbst wenn du es mit Regulären Ausdrücken und den ereg_ Funktionen hinbekommst wird es langsamer, unsauberer sein und vorallem bei (fehlerhaften) Verschachtelungen fehlerhaftes HTML liefern.

Wieso also nicht gleich richtig ?


4.

Weil die klasse einfach zu kompliziert und groß ist... ich will nur 4 oda 5 BB-Code interpretieren, mehr net... da wird die klasse wohl um einiges langsammer als der code von mir sein... natürlich glaub ich schon was du sagst !

Und ich denke viele sind stur, weil sie ja net fragen "was für möglichkeiten gibts" sondern "wie geht genau das !?" wenn dann so ein vorschlag kommt, is das doch gut, aber ich wollte jetzt genau da meinem code wissen, wie es geht. ;)

EDIT:

Wär es besser wenn ich einfach mir schleifen und strpos arbeite und somit die tags ermittle ?


5.

Ich sehe das nicht so unpragramatisch und bezweifele, ob die vorgeschlagene Parserklasse wirklich schneller ist als Regular Expressions. Wobei es fast keine Rolle spielt, weil es eh schnell wie Rakete ist. Irgendwie vergessen die meisten immer wieder, dass die aktuellen CPUs zum rendern aufwändiger Videos in Echtzeit in der Lage sind - wie arm ist daegegen eine popelige Textersetzung auf Basis von Regulären Ausdrücken.

Nur ist hier natürlich der Programmcode falsch und unzreichend. Ich habe mir auch eine bbCode Funktion geschrieben, die tut es schon ziemlich gut (und kann natürlich beliebig angepaßt werden):

Code:                   In Zwischenablage kopieren (nur IE)
4">

Sicher kontrolliert die Funktion keine Syntaxfehler - aber sie läuft gut und: ich finde BBCodes sowieso schwachsinnig, weil HTML ausreichen würde. Nur wenn HTML kein aqäquates Kontrukt bereitstellt, würde ich eine neue Syntax einführen (wie hier im Forum z.B. die Funktion "PHP Funktion").


6.

Man kommt halt nicht mit jedem Mittel zum Ziel. Mit einem Traktor fahr ich ja auch kein Formel1-Rennen. Reguläre Ausdrücke sind halt für Deine Aufgabenstellung nur bedingt geeignet: Man kriegt schon irgendwie ein Ergebnis, aber mehr schlecht als recht. Da hilfts auch nix, den Ausdruck schön kompliziert zu machen.


7.

Zitat:
Sicher kontrolliert die Funktion keine Syntaxfehler - aber sie läuft gut und: ich finde BBCodes sowieso schwachsinnig, weil HTML ausreichen würde. Nur wenn HTML kein aqäquates Kontrukt bereitstellt, würde ich eine neue Syntax einführen (wie hier im Forum z.B. die Funktion "PHP Funktion").
BBCode soll ja HTML nicht ergänzen oder ersetzen, sondern ist dazu da, dass man HTML komplett deaktivieren kann, und sich somit keine Sorgen um XSS machen muss.

Und bei der BBCode Parserklasse entsteht eben nur gültiges (X)HTML, auch das ist ein wichtiger Punkt, denn sonst zerschießt einem ein blöd gesetzes Tag das ganze Design.

Und da die Klasse fast nur Stringfunktionen benutzt, und diese um den Faktor 10 schneller sind als RegExp, würde ich schon behaupten, dass diese schneller ist, auch wenn das nur eine nebensächliche Rolle spielen mag.


8.

@Rana: ... gott segne dich :D Ok das sieht doch schon etwas "ich-kapier-das"-mäßig aus und wie du schon sagtest, bei der heutigen rechenleistung macht doch dieser kleiner unterschied kein bisschen was aus :) Ich würde sagen der code is gut, hab ihn aber noch net probiert.

Danke @all


9.

Zitat:
Und da die Klasse fast nur Stringfunktionen benutzt, und diese um den Faktor 10 schneller sind als RegExp, würde ich schon behaupten, dass diese schneller ist, auch wenn das nur eine nebensächliche Rolle spielen mag.
Gut dass Du nicht gewettet hast. Ich habe folgende Minibeispiele gebaut:

bbCode Parser Klasse:
==================
Code:                   In Zwischenablage kopieren (nur IE)
5">

myBBCode Funktion (reguläre Ausdrücke):
Code:                   In Zwischenablage kopieren (nur IE)
6">

Man kann via Parameter c=xxxx die Anzahl Durchläufe angeben (Default ist 1000). Und was kommt heraus: obwohl die ich Parserklasse mit NUR drei Ersetzungsregeln bestückt habe (nur die billigen Fett, Kursiv und Unterstrichen Codes) läuft die Parserklasse um den [color="red"]Faktor 50[/color] (!) langsamer als meine regulären Ausdrücke. Und wenn ich meine Funktion zusammenstreiche, dass sie auch "nur noch" Fett, Kursiv und Unterstrichen ersetzt (also damit den Funktionsumfang angleiche), dann ist es sogar Faktor [color="red"]100[/color] .

Ich habe mir auch gerade zum ersten Mal diese Parserklasse "angetan" - ich finde sie für DIESEN Zweck über das Ziel hinausgeschossen. Würde ich niemals in meinem Forenscript einsetzen (tu ich ja auch nicht!).

Und HTML Tags (um das Thema kurz noch einmal einzugehen) kann ich wunderbar mit strip_tags() verwalten, lasse dort nur einen ganz eingeschränkten Satz von Tags zu, eben genau die benötigten <b>, <i>, <u>, <img>, <a> usw. - läuft tadellos und ist schlicht und einfach. Dass ich überhaupt bbCodes in meinem Script eingebaut habe, ist der Ruf der Endanwender danach - man beugt sich bisweilen Anwenderwünschen.


10.

wie bzw wo muss ich denn diesen BBcode bzw den parser einbauen damit er funktioniert?


Hier gehts zum Orginal Eintrag "Eigene BB-Code Funktion; reihenfolge macht code kaputt" im Forum
 
phpforum.de | Impressum