Ich versuche, Benutzereingabe in einem XML-Dokument auf der Client-Seite (Javascript) zu speichern und diese an den Server für die Persistenz zu übertragen.Entfernen von ungültigen Zeichen aus XML vor dem Serialisieren mit XMLSerializer()
Ein Benutzer zum Beispiel eingefügt in Text, der ein STX-Zeichen (0x2) enthalten. Der XMLSerializer hat das STX-Zeichen nicht verlassen und wurde daher nicht in wohlgeformtes XML serialisiert. Oder vielleicht hätte der Aufruf .attr() dem STX-Zeichen entgangen sein sollen, aber in jedem Fall wurde ungültiges XML erzeugt.
ich die Ausgabe von in-Browser XMLSerializer zu finden() ist nicht immer gut ausgebildet ist, (und erfüllen nicht einmal die eigenen DOMParser Browser()
Dieses Beispiel zeigt, dass das STX-Zeichen ist nicht richtig codiert durch XMLSerializer():
> doc = $.parseXML('<?xml version="1.0" encoding="utf-8" ?>\n<elem></elem>');
#document
> $(doc).find("elem").attr("someattr", String.fromCharCode(0x2));
[ <elem someattr=""></elem> ]
> serializedDoc = new XMLSerializer().serializeToString(doc);
"<?xml version="1.0" encoding="utf-8"?><elem someattr=""/></elem>"
> $.parseXML(serializedDoc);
Error: Invalid XML: <?xml version="1.0" encoding="utf-8"?><elem someattr=""/></elem>
Wie soll ich ein XML-Dokument im Browser-Konstrukt (mit von beliebiger Benutzereingabe bestimmt params), so dass es immer gut gebildet werden (alles entging richtig)? Ich muss IE8 oder IE7 nicht unterstützen.
(Und ja, ich validiere die XML auf der Serverseite, aber wenn der Browser dem Server ein Dokument übergibt, das nicht wohlgeformt ist, ist es das Beste, was der Server tun kann, es abzulehnen, was für die Armen nicht hilfreich ist Benutzer)
Ich bin mir nicht sicher, ob es viel einfacher ist, als die Quellzeichenfolge Zeichen für Zeichen durchzugehen und bei Bedarf zu Entitäten zu übersetzen. – Pointy
Ich würde mir nicht trauen, dies zu tun (ich kenne XML nicht gut genug, um nach anderen möglichen Problemen zu suchen) ... ist eine gemeinsame/Standard-JS-Bibliothek, um dies für mich makeSafeForXML (inString) zu tun? – Seth
Würden Sie nicht zufällig zufällig doppelt vergeben? Zum Beispiel, wenn in einem zukünftigen Browser XMLSerializer() + attr() enden wird, was zu einem doppelten Escaping führt? – Seth