Ich versuche, alle Instanzen des Zeichens > in sein HTML-Entity-Äquivalent, >, innerhalb einer HTML-Zeichenkette, die HTML-Tags enthält, zu konvertieren. Am weitesten bin ich mit einer Lösung für dieses Problem gekommen, indem ich eine Regex verwendet habe.
Hier ist, was ich bis jetzt habe:
public static readonly Regex HtmlAngleBracketNotPartOfTag = new Regex("(?:<[^>]*(?:>|$))(>)", RegexOptions.Compiled | RegexOptions.Singleline);
Das Hauptproblem, das ich habe, ist die Isolierung der einzelnen > Zeichen, die nicht Teil eines HTML-Tags sind. Ich möchte keine vorhandenen Tags konvertieren, da ich den HTML-Code zum Rendern beibehalten muss. Wenn ich die > Zeichen nicht konvertiere, erhalte ich fehlerhaftes HTML, was zu Darstellungsproblemen im Browser führt.
Dies ist ein Beispiel für eine zu analysierende Testzeichenfolge:
"Ok, now I've got the correct setting.<br/><br/>On 12/22/2008 3:45 PM, jproot@somedomain.com wrote:<br/><div class"quotedReply">> Ok, got it, hope the angle bracket quotes are there.<br/>><br/>> On 12/22/2008 3:45 PM, > sbartfast@somedomain.com wrote:<br/>>> Please someone, reply to this.<br/>>><br/>><br/></div>"
In der obigen Zeichenfolge sollte keines der > Zeichen, die Teil von HTML-Tags sind, in > umgewandelt werden. Also, dies:
<div class"quotedReply">>
sollte dies werden:
<div class"quotedReply">>
Ein weiteres Problem ist, dass der Ausdruck oben eine nicht-erfassende Gruppe verwendet, was in Ordnung ist, außer der Tatsache, dass die Übereinstimmung in Gruppe 1 ist. Ich bin nicht ganz sicher, wie man eine Ersetzung nur auf Gruppe 1 zu tun und den Rest der Übereinstimmung zu erhalten. Es scheint, dass ein MatchEvaluator nicht wirklich den Trick tun, oder vielleicht kann ich einfach nicht vorstellen, es gerade jetzt.
Ich vermute, meine Regex könnte etwas Liebe gebrauchen.
Hat jemand eine gute Idee?