2

UTF-8 クエリ文字列を読み取るときに、文字エンコードの問題が発生しています。別の外部アプリケーションは、次のような Orbeon アプリケーションへのリンクを構築します。

  • http://localhost:8080/ops/encoding-test/?message=hello%20world
  • http://localhost:8080/ops/encoding-test/?message=it%E2%80%99s%20a%20message

アプリケーションのモデルは、oxf:requestプロセッサでクエリ文字列を読み取り、その文字列をビューに表示します。上記の最初のケースでは、アプリケーションは「hello world」を問題なく正しく表示します。2 番目のテスト ケースで%E2%80%99は、UTF-8 アポストロフィの URL エンコーディングであり、アプリケーションで次のエラーが発生します。

2012-09-13 12:21:43,383 ERROR XSLTTransformer  - Error at line 174 of oxf:/config/theme-examples.xsl:
Illegal HTML character: decimal 128
2012-09-13 12:21:43,384 ERROR ProcessorService  - Exception at line 174 of oxf:/config/theme-examples.xsl
; SystemID: oxf:/config/theme-examples.xsl; Line#: 174; Column#: -1
org.orbeon.saxon.trans.XPathException: Illegal HTML character: decimal 128

エラーは%80、アポストロフィのマルチバイト エンコーディングの 2 番目のバイトを参照しています。ログでは、テーマが例外を発生させるだけでなく、xforms インスペクターも例外を発生させることに注意してください。

URL が UTF-8 ではなく Latin1 としてデコードされているように見えます。これは、デバッグ プロセッサit???s a messageがアポストロフィに 3 文字を使用してリストするためです。これまでの私の調査では、HTTP にクエリ文字列自体のエンコーディングを指定する方法があるようには見えません。

  1. oxf:request で読み取るときにクエリ文字列のエンコーディングを指定する方法はありますか? プロセッサの構成プロパティや、デフォルトを設定する properties-local.xml に関連するものは見当たりませんでした。
  2. そうでない場合、関連する文字列のエンコーディングを強制する方法はありますか? これは XSLT で実行できると思われますが、例が見つかりませんでした。ruby のString#force_encodingに相当するものが欲しいと思います。
  3. そうでない場合、エラーを回避するための他の推奨される方法はありますか? ここでの私の現在の最悪のハック修正は、サーブレットにヒットする前に mod_rewrite を使用して問題のある文字を取り除くことです。

任意のガイダンスと支援をいただければ幸いです。

( http://mail-archive.ow2.org/ops-users/2012-09/msg00033.htmlの ops-users メーリング リストに相互投稿)

4

1 に答える 1

3

Orbeon Forms は、サーブレット API によって返されるものに依存しています: を参照getParameterMap()してServletExternalContextください。したがって、これはアプリケーション サーバー レベルで設定する必要があるようです。TomcatURIEncoding="UTF-8"<Connector>を使用している場合は .

于 2012-09-14T03:00:28.927 に答える