Ich verwende einen HTML-Sanitizing-Whitelist-Code, den ich hier gefunden habe:
http://refactormycode.com/codes/333-sanitize-html
Ich musste das "font"-Tag als zusätzliches Tag hinzufügen, um es abzugleichen, also habe ich versucht, diese Bedingung nach der <img
Tag-Check
if (tagname.StartsWith("<font"))
{
// detailed <font> tag checking
// Non-escaped expression (for testing in a Regex editor app)
// ^<font(\s*size="\d{1}")?(\s*color="((#[0-9a-f]{6})|(#[0-9a-f]{3})|red|green|blue|black|white)")?(\s*face="(Arial|Courier New|Garamond|Georgia|Tahoma|Verdana)")?\s*?>$
if (!IsMatch(tagname, @"<font
(\s*size=""\d{1}"")?
(\s*color=""((#[0-9a-f]{6})|(#[0-9a-f]{3})|red|green|blue|black|white)"")?
(\s*face=""(Arial|Courier New|Garamond|Georgia|Tahoma|Verdana)"")?
\s*?>"))
{
html = html.Remove(tag.Index, tag.Length);
}
}
Abgesehen von der obigen Bedingung ist mein Code fast identisch mit dem Code auf der Seite, auf die ich verlinkt habe. Wenn ich versuche, dies in C# zu testen, wird eine Ausnahme ausgelöst, die besagt, dass " Not enough )'s
". Ich habe die Klammern mehrmals gezählt, und ich habe den Ausdruck durch ein paar Online-Javascript-basierte Regex-Tester laufen lassen, und keiner von ihnen scheint mir irgendwelche Probleme zu melden.
Übersehe ich etwas in meiner Regex, das dazu führt, dass eine Klammer ausbricht? Was muss ich tun, um das zu beheben?
UPDATE
Nach vielen Versuchen und Irrtümern erinnerte ich mich daran, dass die #
Zeichen ist ein Kommentar in Regexen. Der Schlüssel zur Lösung dieses Problems ist die Escape-Funktion für das #
Charakter. Für den Fall, dass jemand anderes auf das gleiche Problem stößt, habe ich meine Lösung beigefügt (ich habe einfach das #
Zeichen)
if (tagname.StartsWith("<font"))
{
// detailed <font> tag checking
// Non-escaped expression (for testing in a Regex editor app)
// ^<font(\s*size="\d{1}")?(\s*color="((#[0-9a-f]{6})|(#[0-9a-f]{3})|red|green|blue|black|white)")?(\s*face="(Arial|Courier New|Garamond|Georgia|Tahoma|Verdana)")?\s*?>$
if (!IsMatch(tagname, @"<font
(\s*size=""\d{1}"")?
(\s*color=""((\#[0-9a-f]{6})|(\#[0-9a-f]{3})|red|green|blue|black|white)"")?
(\s*face=""(Arial|Courier\sNew|Garamond|Georgia|Tahoma|Verdana)"")?
\s*?>"))
{
html = html.Remove(tag.Index, tag.Length);
}
}
0 Stimmen
Ihr Update gilt nur, wenn die IgnorePatternWhitespace-Option angegeben ist ... die in der IsMatch-Code, den ich gefragt, ohne eine Antwort ... dh Sie haben nicht zeigen uns den Code, der das Problem verursacht.
0 Stimmen
Nebenbei bemerkt: Ihr Regex passt nicht zu einem Font-Tag, bei dem die Attribute in einer anderen Reihenfolge stehen, wie <font color="red" size="2">.
0 Stimmen
Ich habe kein Problem damit, dass die Attribute nicht in einer anderen Reihenfolge abgeglichen werden. Das HTML-Editor-Steuerelement, das ich verwende, erzeugt das <font>-Tag nur in der Reihenfolge, für die ich teste.