Hallo, habe eine Frage zu BBCode von Codekicker. Der Parser wirft jedes Mal einen Fehler wen z.B. folgender Text eingegeben wird:
a) [273 Tiere] b) Das [2] mal habe ich ...
Der Parser versucht diese als BB-Code Tags zu interpretieren. Nur kann es vorkommen das ein User solch einen Syntax benutzt. Wie kann ich dieses Problem lösen?
Das Problem kannst du lösen, indem du die FAQ und die Feedback-Seite von Codekicker liest. Da steht das man [] mit \ maskieren kann, damit sie nicht als BB-Code geparst werden.
Eigentlich funktioniert alles ganz gut, muss aber noch an list & img arbeiten. Kann jemand von den Admins den Codekicker-Code zum Parsen der Klammern als Referenz zeigen? Ich weiß nicht ob ich das hier richtig mache...
Also erstens ist das keine Antwort, gehört also nicht hierher. Zweitens kannst du die Antwort (die du als Antwort auf deine Frage akzeptierst) auch als solche kennzeichnen. Und Drittens ist es normalerweise nicht möglich komplexen BB-Code (der z.B. auch geschachtelt werden kann) mit einem einfachen Regex.Replace zu parsen / zu ersetzen.
"Und Drittens ist es normalerweise nicht möglich komplexen BB-Code (der z.B. auch geschachtelt werden kann) mit einem einfachen Regex.Replace zu parsen / zu ersetzen."
Korrekt, deshalb frage ich ja auch, ob ich es richtig mache und wie das bei Codekicker gemacht wird - hier funktioniert's nämlich.
Ich glaube nicht das ein Admin den Parsercode hier reinstellt - sind eben sicher nicht nur zwei Zeilen ;). Vielleicht hilft ja: www.lmgtfy.com?q=bbcode+parsen
Der Parser kann in einem Modus versetzt werden, in dem jeder Fehler ignoriert wird. Das tut man, indem man dem Konstruktor von BBCodeParser als ersten Parameter einen ErrorMode übergibt. Dieser ist wie folgt definiert:
public enum ErrorMode { /// <summary> /// Every syntax error throws a BBCodeParsingException. /// </summary> Strict,
/// <summary> /// Syntax errors with obvious meaning will be corrected automatically. /// </summary> TryErrorCorrection,
/// <summary> /// The parser will never throw an exception. Invalid tags will be ignored. /// </summary> ErrorFree, }
codekicker läuft mit ErrorFree: "[0]" musste ich nicht escapen.
Danke Marvin, genau diesen Modus suche ich. Das Problem ist, das ich im Quellcode keinen Konstruktor sehe, der dieses erlauben würde. Die Enumeration ErrorMode ist auch nicht verfügbar. Ich habe die neuste Version 29422. Folgender Konstruktor ist verfügbar:
public BBCodeParser(IList<BBTag> tags) { if (tags == null) throw new ArgumentNullException("tags"); Tags = tags; }
Zweitens kannst du die Antwort (die du als Antwort auf deine Frage akzeptierst) auch als solche kennzeichnen.
Und Drittens ist es normalerweise nicht möglich komplexen BB-Code (der z.B. auch geschachtelt werden kann) mit einem einfachen Regex.Replace zu parsen / zu ersetzen.