2011-12-05 4 views
14

私は(他の多くの人のように)ユーザー入力を受け取り、データベースに格納し、後で(とりわけ)XMLツールを使用して処理します。アプリケーションは自由なテキスト入力を受け取り、他の多くの開発者と同様に、エスケープや引用には非常に注意していますので、空白、引用文字、予約されたXML文字などを含む入力を処理できます。縦のタブ文字(16進数0B)または改行(16進数0C)を含む文字列を入力します。これはXMLツールでは一切処理できず、アプリケーションはbarfになります。垂直タブやその他の無効なxml文字を処理するためのベストプラクティス

私のアプリケーションでは、「往復」プロセス中に元の入力を保持することが非常に重要です。私は好きではない文字を取り除くだけでなく、特に時折使用されるフォームフィードプレーンテキストファイルで。

XML処理が関係しているときにこれらの文字を処理するためのベストプラクティスまたは一般的な戦略はありますか?

答えて

-3

amperstand(�&#0x1F)を使用してエスケープし、最後にデコード/復元する必要があります。

XmlTextWriter incorrectly writing control characters

+0

-1:これは意味をなさない。無効なXMLは単純にXMLではありません。 –

+0

それから質問は意味をなさない。 XMLに特殊な無効文字を入れる必要がある場合(無効な場合)、エスケープ処理はファイルの処理を許可し、無効な文字を使用する場合はアプリケーション自体で処理する必要があります。 CDATAやその他の形式も使用できます。 – Vincent

+3

確かに、質問は意味をなさない。開発者がデータを送信する人々がXMLを理解できないという事実を補うように要求されている別のケースです。 –

3

を参照してくださいはい、残念ながらいくつかの文字は、XMLでは違法であり、何の実体相当するものがありません。これらの例の一つとして、以下を参照してください。

文字列セッターがある
http://www.jdom.org/docs/apidocs.1.1/org/jdom/Element.html#setText(java.lang.String) 

...それは例外をスローすることができます!垂直タブは、XMLエンティティが存在しない文字の1つで、XMLだけで「エスケープ」する方法もありません。

私は、これらの文字を含む可能性のある文字列をサニタイズするためにbase64エンコーディングを使用して自分自身でこの問題を解決しています。いつもbase64エンコードしてデコードする必要があるので、ちょっとばかげていますが、良い選択肢はないと思います。

関連する問題