1

Webアプリに入力ボックスがあります。次の入力を入力すると、次のようになります。

charʃƪ

サーバー側で、Jdomを使用してxmlドキュメントを作成しようとすると、クラッシュして次の例外が発生します。

org.jdom.IllegalDataException:データ "char(3A"はJDOM属性に対して有効ではありません:0x1aは有効なXML文字ではありません。

     at org.jdom.Attribute.setValue(Attribute.java:491)      
     at org.jdom.Attribute.<init>(Attribute.java:228)
     at org.jdom.Attribute.<init>(Attribute.java:251)
     at org.jdom.Element.setAttribute(Element.java:1128)

これは、ブラウザがajax呼び出しをエンコードする方法です... &MESSAGE = char%20(3%1AA

pRequest.getParameter( "MESSAGE");を実行するとサーバー側で それは私を返します: " char(3A "

そこで何が起こっているのかアイデアはありますか?

4

3 に答える 3

1

現在動作しています。

jQueryプラグインのURLEncodeからネイティブのjavascript関数に切り替えました。

encodeURIComponent()

さらに、ajax呼び出しでcontentTypeを指定できることがわかりました

contentType: "application/x-www-form-urlencoded; charset=UTF-8"
于 2012-06-21T16:37:19.067 に答える
0

XML 1.0仕様では、文字0x1aを使用することはできません...これまでに。Unicode文字ではありません

http://www.w3.org/TR/2008/PER-xml-20080205/#charsets

XML 1.1仕様では、0x1a文字が許可されています。http ://www.w3.org/TR/2004/REC-xml11-20040204/#NT-Charを参照してください。

しかし3つのこと:

  • JDOM 1.x(および2.x)は、XML1.0以外の文字を拒否します。
  • XML 1.1でも、0x1a文字は「制限付き」です(それが何を意味するのかはまだ100%わかりませんが、調査中です)。
  • 「置換」文字(0x1a)を使用してもよろしいですか

上記に関係なく、入力ボックスとJDOM setAttribute(...)呼び出しの間のコードに問題があると思われます。これらの場所の間に、文字エンコード、シリアル化、またはその他の方法で入力値を変更する何かがありますか?JDOMが呼び出される前に、データを変更する他の問題が発生しているのではないかと思います。これは、char0x1aをXML文字として実際にロードしようとしている可能性が低いためです。

于 2012-06-20T17:04:07.923 に答える
0

@rolflが疑っているので、ブラウザで何かが非常に奇妙になっています。何を使っていますか?

Unicodeとエンコーディングの探偵作業を少し行うと、おそらく何が起こっているのかについてのヒントを得ることができます。

これらの文字を入力しようとしていると仮定します。

  • ʃ、Unicode U + 0283(ラテン小文字esh)
  • ƪ、Unicode U + 01AA(ラテン文字の逆eshループ)

ブラウザのエンコーディングは、次の2つの文字のユニコードコードポイントに由来していることがわかります。

  • (、ASCII文字セットではたまたま28です
  • 3、残りの3
  • %1A、1Aは有効なURL文字ではないため、エンコードされます
  • A、残りのA

使用しているajaxjavascriptライブラリですか?おそらく切り替える時間ですか?

于 2012-06-21T10:35:58.600 に答える