Удаление недопустимых символов из XML перед сериализацией с помощью XMLSerializer ()

Я пытаюсь сохранить пользовательский ввод в XML-документе на стороне клиента (javascript) и передать его на сервер для сохранения.

Например, один пользователь вставил текст, содержащий символ STX (0x2). XMLSerializer не экранировал символ STX и поэтому не сериализовался в правильно сформированный XML. Или, возможно, вызов .attr () должен был экранировать символ STX, но в любом случае был получен неверный XML.

Я обнаружил, что вывод XMLSerializer () в браузере не всегда правильно сформирован (и даже не удовлетворяет самому DOMParser браузера)

В этом примере показано, что символ STX неправильно закодирован 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>

Как мне создать XML-документ в браузере (с параметрами, определяемыми произвольным пользовательским вводом), чтобы он всегда был правильно сформирован (все правильно экранировано)? Мне не нужно поддерживать IE8 или IE7.

(И да, я проверяю XML на стороне сервера, но если браузер передает серверу документ, который не является правильно сформированным, лучшее, что может сделать сервер, это отклонить его, что не так уж полезно для бедного пользователя )

Ответы на вопрос(1)

Ваш ответ на вопрос