| 

.NET C# Java Javascript Exception

0
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?
News:
19.01.2010
Cosmo 41 2
4 Antworten
2
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.
20.01.2010
FalkP 3,3k 3 8
0
Danke FalkP!

Ich habe heute ein Regex geschrieben um die Klammern automatisch zu Parsen (ohne das der User '\' eingeben muss):

// Linke Klammer
content = Regex.Replace(content, @"([)(?!b]|/b]|i]|/i]|u]|/u]|quote]|/quote]|code]|/code]|/url]|/list]|\*]|list(=[\d]+){0,1}]|url=.+])", "[");


// Rechte Klammer
content = Regex.Replace(content, @"(?<!([b|[/b|[i|[/i|[u|[/u|[\*|[quote|[/quote|[code|[/code|[url=.+|[/url|[list(=[\d]+){0,1}|[/list))(])", "&#93;");


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...
21.01.2010
Cosmo 41 2
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.
FalkP 21.01.2010
"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.
Cosmo 21.01.2010
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
FalkP 21.01.2010
Der Parser ist sowieso Open-Source, es geht lediglich um das Parsen der Klammern. Meiner Meinung nach wird dazu kein riesiges Framwework benötigt.
Cosmo 21.01.2010
0
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.
21.01.2010
Marvin Steppat 4,0k 1 4 8
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;
}
Cosmo 22.01.2010
0
..........
23.11.2017
muffi 1,4k 1 9

Stelle deine Regex-Frage jetzt!