Eliminar caracteres no válidos de XML antes de serializarlo con XMLSerializer ()

Estoy tratando de almacenar las entradas del usuario en un documento XML en el lado del cliente (javascript), y transmitirlo al servidor para su persistencia.

Un usuario, por ejemplo, pegó en un texto que incluía un carácter STX (0x2). El XMLSerializer no escapó al carácter STX y, por lo tanto, no se serializó a XML bien formado. O tal vez la llamada .attr () debería haber escapado del carácter STX, pero en cualquier caso, se produjo un XML no válido.

Estoy encontrando que la salida de XMLSerializer () en el navegador no siempre está bien formada, (y ni siquiera satisface el propio DOMParser del navegador ()

Este ejemplo muestra que el carácter STX no está codificado correctamente por 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>

¿Cómo debo construir un documento XML en el navegador (con los parámetros determinados por una entrada de usuario arbitraria) de modo que siempre esté bien formado (todo se escapó correctamente)? No necesito soportar IE8 o IE7.

(Y sí, valido el XML en el lado del servidor, pero si el navegador entrega al servidor un documento que no está bien formado, lo mejor que puede hacer el servidor es rechazarlo, lo que no es tan útil para el usuario pobre )

Respuestas a la pregunta(1)

Su respuesta a la pregunta