2012-03-30 2 views
2

Das Ergebnis ausAsp.Net Html sanitization Bibliothek hinzugefügt Zeilenvorschub nach 256 Zeichen

Sanitizer.GetSafeHtmlFragment("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed nunc tellus, consectetur eget blandit euismod, pharetra a libero. In pretium, sem sed mollis hendrerit, libero metus condimentum tellus, eget adipiscing odio ligula at velit. Nulla luctus nisl quis sem venenatis ut suscipit mauris posuere.") 

werden nach 256 Zeichen einen Zeilenvorschub in den ersten Raum hinzufügen, so "quis sem venenatis ut suscipit mauris posuere." wird auf seiner eigenen Reihe sein.

Hat jemand irgendwelche Vorschläge, wie man das korrigiert oder vermeidet?

Grüße, Mathias

Antwort

4

Die Antwort auf diese wirklich einfach war, ersetzen wir nur bestehende Zeilenumbrüche mit einem marker string, mach die sanitation, entferne alle newlines, die erschienen sind und lege die bereits existierenden newlines zurück.

static string newlinemarker = Guid.NewGuid().ToString(); 

    public static string Sanitize(string html) 
    { 
     //Change newlines to marker strings 
     string escapedHtml = html.Replace(Environment.NewLine, newlinemarker); 
     string sanitized = Sanitizer.GetSafeHtmlFragment(escapedHtml); 
     //Text should not contain newlines so if the sanitizer has added any they can be removed 
     sanitized = sanitized.Replace(Environment.NewLine, ""); 
     //Put newline back 
     sanitized = sanitized.Replace(newlinemarker, Environment.NewLine); 
     return sanitized; 
    } 

Grüße, Mathias

1

den Quellcode der Suche durch, scheint es ein „Feature“ genannt ist autoNewLines, die auf die HtmlWriter Klasse intern ist, die für die Erzeugung dieser Zeilenumbrüche verantwortlich ist. Es ist unmöglich, dieses Verhalten zu ändern, ohne eine Source-Build-Kopie der AntiXSS-Bibliothek zu erwerben und eine eigene Version zu erstellen, in der autoNewLines auf false gesetzt ist.

Dies ist wahrscheinlich beabsichtigt, um die Effizienz für die Analyse der Ausgabe HTML in einem Browser zu verbessern, und die Newline in der Quelle sollte keine Auswirkungen auf das Rendern der Ausgabe, da Browser im Allgemeinen Whitespace ignorieren. Wenn das Analysieren des Quelltexts ohne Zeilenumbrüche von entscheidender Bedeutung ist, verwenden Sie wahrscheinlich das falsche Werkzeug für den Job.

Es ist tatsächlich ein Problem auf diese in der issue tracker Zusammenhang stehen (siehe insbesondere den Kommentar von erwin118, die Ihr Problem behebt): http://wpl.codeplex.com/workitem/15451

+1

_If den Quelltext ohne Zeilenumbrüche Parsen ist, dass von entscheidender Bedeutung, Sie sind das falsche Werkzeug für die job._ wahrscheinlich mit I-Objekt muss - ein gängiges Szenario in- haben Daten _with_ newlines und Sie möchten sie nach der Bereinigung erhalten. Wenn diese Lib mehr Zeilenumbrüche enthält, ohne dass sie deaktiviert werden kann, ist das nur ein schlechtes Design. Der Methodenname "GetSafeHtmlFragment" sollte nicht mehr tun, als das _fragment safe_ zu machen. – cederlof

Verwandte Themen