Hallo zusammen,

ich benötige für meine Website ein Tool, um Nutzereingaben (in Textboxen) in 
HTML umzuwandeln. Dabei wollte ich eine Art von BBCode (Buletin Board Code) 
zulassen - damit der Nutzer seine Texte etwas formatieren kann.

Ein richtiges Tool zur Eingabe von Texten (mit Javascript usw.) wie zum 
Beispiel FCKEditor wollte ich eigentlich nicht einbauen, wobei ich auch dazu 
Fragen hätte.

Also - was soll gemacht werden:
Nutzereingabe:
[b]Hallo zusammen[/b]
Dies ist der [u][i]Text[/i][/u]!

Das soll dann in:
<b>Hallo zusammen</b><br />
Dies ist der <u><i>Text</i></u>!

Umgewandelt werden.

Bisher mache ich das via Regex.Replace(...) und dort jeweils mit Pattern - für 
das gesamte Tag.

Sieht etwa so aus:
Regex.Replace(InputString, "(\\[b]\\](?<Text>(?:(?:.|\n)*?))\\[/\\])", 
"<b>${Text}</b>");

Das ganze funktioniert - ist aber nicht wirklich befriedigend - da es doch 
Probleme gibt, spätestens wenn ich einen Text kürze - um zum Beispiel in einer 
Liste nur die ersten 200 Zeichen darzustellen. Dann kann es vorkommen - dass 
halt ein Tag nicht mehr geschlossen wird - und dies ist ja nicht sonderlich 
schön.

Da wir hier vor kurzem schon mal ne ähnliche Anfrage hatten - dachte ich mir, 
ich mache das über nen Stack (LIFO Auflistung Last In - First Out) und schmeiß 
einfach das gefundene Tag auf den Stack - und wenn sein schließendes Tag kommt 
- wird es wieder runter gehauen.
Klingt eigentlich für HTML Code recht schlüssig - da eigentlich keine 
ineinander verschachtelten Elemente zulässig sind.

Quasi zulässig:
<b><i>Text</i></b>
Nicht zulässig:
<b><i>Text</b></i>

Funktionsweise mit dem Stack:
Stack.Push("b")
Stack.Push("i")
If (Stack.Peek() == "i")
        Stack.Pop();
Else
        ...
If (Stack.Peek() == "b")
        Stack.Pop();
ELSE
        ....

So hätte ich mir das zumindest gedacht. Damit könnte man einfach alle Elemente 
die noch net vom Stack entfernt wurden - sauber zumachen - und somit auch ne 
gekürzte Fassung ausgeben.

Aber leider stoße ich da gerade an ein paar gedankliche Barrieren, und da auch 
noch der Admin seinen doofen Server bei mir zum neu aufsetzen abgestellt hat, 
kann ich mich bei dem Krach auch noch net so recht konzentrieren.

Was haltet Ihr von dem Ansatz - oder kennt Ihr vielleicht saubere Lösungen 
(möglichst C#)?

_______________________________________________
Asp.net Mailingliste, Postings senden an:
[email protected]
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/asp.net

Antwort per Email an