Einfügen von Word + Erstellen von XML-Dokument -> hexadezimalen Wert 0x0C, ist ein ungültiges Zeichen (.NET)

StackOverflow https://stackoverflow.com/questions/2874330

Frage

Ich habe eine Webseite, die HTML-Eingaben von Benutzern akzeptiert. Die Eingabe wird umgewandelt in ein XML-Dokument mit den System.Xml Namespace verwenden, wie folgt aus:

var doc = new XmlDocument();
doc.AppendChild(doc.CreateElement("root"));
doc.DocumentElement.SetAttribute("BodyHTML", theTextBox.Text);

Danach eine XSL-Transformation (System.Xml.Xsl.XslCompiledTransform) auf die Daten verwendet.

Benutzer neigen dazu, zu schreiben Text in Microsoft Word, mit Kugeln, Zitate usw. Wenn auf meiner Seite einfügen, deren Text enthält ungültige Zeichen wie 0x0C, 0x03 und so weiter. Wenn die XSL-Transformation verwendet, tritt dieser Fehler auf „hexadezimalen Wert 0x0C, ein ungültiges Zeichen ist.“

Mein fix ist bisher die Zeichen zu beseitigen, dass ich gefunden habe, offensiv zu sein, mit Schleifen und String.Replace: Alle Zeichen von 0 bis 31, mit der Ausnahme 9, 10 und 13 sind mit String.Empty ersetzt.

Was ich suche ist ein besserer Weg, dies zu tun. Ein eingebauter in .NET-Methode? Oder vielleicht nur die komplette Liste der illegalen Unicode-Zeichen.

War es hilfreich?

Lösung

Gefunden zwei Antworten, die das gleiche tun

  1. http: // seattlesoftware.wordpress.com/2008/09/11/hexadecimal-value-0-is-an-invalid-character/
  2. http://www.theplancollection.com / Haus-Plan-related-Artikel / hexadezimal-Wert-invalid-Zeichen

Die ersten Anwendungen ein String, Schleifen durch einzelne Zeichen nacheinander und filtert illegale Zeichen. Die zweite verwendet ein Regex und .replace das Gleiche zu erreichen. Beide basieren auf dem XML-Standard angesehen, um herauszufinden, welche Zeichen illegal sind.

Ich habe einige Timings auf einer langen Zeichenfolge (1.8 MB Datei Lauf 1000 mal) und eine kurze Zeichenfolge ( „Hallo Welt“ 10.000.000 mal laufen). Die Stringbuilder Methode war ~ 3-mal schneller als die regulären Ausdruck. Die Regex war natürlich nur einmal kompiliert, im Gegensatz zu dem Code, auf die ich verknüpft.

Lange string:

CleanInvalidXmlChars time: 00:00:07.4356230
SanitizeXmlString    time: 00:00:02.3703305

Kurz string:

CleanInvalidXmlChars time: 00:00:05.2805834
SanitizeXmlString    time: 00:00:01.8319114
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top