Sto cercando di memorizzare l'input dell'utente in un documento XML sul lato client (javascript) e trasmetterlo al server per la persistenza.Rimozione di caratteri non validi da XML prima di serializzarli con XMLSerializer()
Un utente, ad esempio, incollato nel testo che includeva un carattere STX (0x2). XMLSerializer non ha eseguito l'escape del carattere STX e pertanto non è stato serializzato in XML ben formato. O forse la chiamata .attr() avrebbe dovuto essere sfuggita al carattere STX, ma in entrambi i casi è stato generato un XML non valido.
sto trovando l'uscita di In-Browser XMLSerializer() non è sempre ben formato, (e non ha nemmeno soddisfare proprio DOMParser del browser()
Questo esempio mostra che il carattere STX è non adeguatamente codificata dal 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>
Come dovrei costruire un documento XML nel browser (con params determinati dall'utente-input arbitrario) in modo tale che sarà sempre ben formato (tutto correttamente sfuggito)? Non è necessario supportare IE8 o IE7
(E sì, convalido il codice XML sul lato server, ma se il browser consegna al server un documento che non è ben formato, il meglio che il server può fare è rifiutarlo, il che non è così utile per i poveri utente)
Non sono sicuro che ci sia qualcosa di molto più semplice che passare attraverso la stringa sorgente carattere per carattere, traducendo le entità in base alle necessità. – Pointy
Non mi fiderei di farlo (non conosco abbastanza bene l'XML per cercare altri possibili problemi) ... è una libreria JS comune/standard per fare questo per me makeSafeForXML (inString)? – Seth
Inoltre, non si finirebbe probabilmente per doppia entitizing per caso? Ad esempio, se in un browser futuro XMLSerializer() + attr() finisce con l'abilitazione, finirai con il doppio escape? – Seth