Ich arbeite gerade an einem BB-Code-Parser. Ich verwende dabei unter anderem folgende BB-Codes:
[b] für fett
[i] für kursiv
[u] für unterstrichen
[left] für einen linksbündigen Absatz
[center] für einen zentrierten Absatz
[right] für einen rechtsbündigen Absatz
[indent] für einen eingerückten Absatz
[quote] für ein Zitat
Damit beim Parsen kein ungültiges HTML erzeugt wird, muss der gesamte Text vor dem Parsen so verändert werden, dass wenn , oder einen absatzerzeugenden Code umklammern, [b],[i] oder [u] vor dem Absatz geschlossen werden, nach öffnen des Absatzes wieder geöffnet werden, am Ende des Absatzes wieder geschlossen werden und dann nach dem Absatz wieder geöffnet werden. Wenn ein Absatz also z.B. fett dargestellt werden soll, dürfen die b-Tags nicht außerhalb des Tags, der den Absatz erzeugt, stehen, sondern müssen davor geschlossen werden und dann innerhalb des Absatzes wieder geöffnet werden.
Ein einfaches Beispiel wäre:
Soll werden zu...
Das ganze sollte aber auch im folgenden Fall funktionieren:
[b]Text1[i]Text2[u]Text3[center]Text4[/center]Text5[/i]Text6[right]Text7[/right]Text8[/b]Text9[/u]
Soll werden zu...
[b]Text1[i]Text2[u]Text3[/u][/i][/b][center][b][i][u]Text4[/u][/i][/b][/center][b][u][i]Text5[/i]Text6[/u][/b][right][b][u]Text6[/u][/b][/right][u][b]Text8[/b]Text9[/u]
Ich habe den Parser eigentlich bereits vollständig fertig. Mir fehlt eben nur noch eine Funktion, die den Text wie oben angegeben umformt. Ich habe recht lange mit preg_replace herumexperimentiert, bin jedoch nicht zu einem zufrieden stellenden Ergebnis gekommen. Es wäre also toll, wenn jemand eine Idee hätte, wie man das Problem lösen kann oder vielleicht jemand weiß, wie das bei anderen Parsern gemacht ist. Vielen Dank bereits im Voraus,
Daniel