ユーザー入力をクライアント側 (javascript) の XML ドキュメントに保存し、それをサーバーに送信して永続化しようとしています。
たとえば、あるユーザーが 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 を検証しますが、ブラウザーが整形式でないドキュメントをサーバーに渡した場合、サーバーができる最善の方法はそれを拒否することです。これは、貧弱なユーザーにとってはあまり役に立ちません。 )