character-encoding - 使用 Orbeon 指定查询字符串的字符编码

标签 character-encoding url-encoding orbeon xforms

我们在读取 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 读取查询字符串处理器,然后在 View 中显示该字符串。在上面的第一种情况下,应用程序正确显示“hello world”,没有任何问题。在第二个测试用例中,%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。请注意,在日志中,不仅主题会引发异常,xforms 检查器也会引发异常。

URL 似乎被解码为 Latin1 而不是 UTF-8,因为调试处理器列出了带有三个撇号字符的 it???s a message。到目前为止,在我的研究中,HTTP 似乎没有办法指定查询字符串本身的编码。

  1. 有没有办法指定使用 oxf:request 读取查询字符串时的编码?我没有看到处理器的配置属性,也没有在 properties-local.xml 中看到任何可以设置默认值的相关内容。
  2. 如果没有,有没有办法强制字符串的关联编码?我怀疑这可以通过 XSLT 来完成,但无法找到示例。我相信我想要类似于 ruby​​ 的 String#force_encoding 的东西.
  3. 如果没有,是否有其他建议的方法来解决该错误?我目前最坏情况的黑客修复是在到达 servlet 之前使用 mod_rewrite 删除任何有问题的字符。

感谢任何指导和帮助!

(交叉发布到 ops 用户邮件列表 http://mail-archive.ow2.org/ops-users/2012-09/msg00033.html )

最佳答案

Orbeon Forms 依赖于 servlet API 返回的内容:请参阅 getParameterMap() in ServletExternalContext 。所以这似乎是您需要在应用程序服务器级别设置的内容;如果使用Tomcat,您可以通过 adding URIEncoding="UTF-8" on the <Connector> 这样做.

关于character-encoding - 使用 Orbeon 指定查询字符串的字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12412202/

相关文章:

python - 在 Jinja2 模板中使用 utf-8 字符

tomcat - tomcat中的字符编码

c# - 获取带有 url 编码斜线的 URL

java - 在 Java 中编码 URL 的最佳方式

mysql - Orbeon Form Builder - 在 mySQL 中保存用户输入的数据

javascript - 在 xforms :submit event does not reflect into the model instance 上使用 javascript 更改节点值

java - Glassfish 和 Mysql 不能很好地存储西里尔字母

PHP+AJAX发送数据(链接)麻烦

xml - 如何使用xpath获取基于节点值的属性值

php - 处理上传的不同编码的文本文件的最佳方法是什么?