【问题标题】:@FormParam truncated for embedded ' in content Apache Wink@FormParam 被截断以嵌入 ' 内容 Apache Wink
【发布时间】:2012-06-20 01:04:17
【问题描述】:

我承认我们通过使用 url 编码的表单在单个变量中发送 XML 文档(换行符转换为空格,内容转义)做了一些愚蠢的事情,但这是为了适应只能发送表单数据的客户端。

当转义的 XML 内容中的一个字符串包含撇号时

'

请求正文的解析停止并且不返回变量的其余部分。当然,这会产生问题,因为我们检索的 XML 文档不完整。

当接收方使用 Apache Wink JAX-RS 库时,在表单参数中传递撇号的正确方法是什么?

这样的一行:

        <decisionspace  title="Traffic Study" details="Discuss the Rivertowns Square projects impact on traffic" />

工作正常,但像这样的一行:

        <decisionspace  title="Traffic Study" details="Discuss the Rivertowns Square project&apos;s impact on traffic" />

在“Square project”之后被截断

被转义的字符是:

"&" becomes "&amp;"
"\"" (double quote) becomes "&quot;"
"'" (single quote) becomes "&apos;"
"<" becomes "&lt;"
">" becomes "&gt;"
bytes < 0x20 or > 0x7f" become "&#nnn;"

【问题讨论】:

    标签: escaping apache-wink form-parameter


    【解决方案1】:

    在进行更多挖掘之后,表单参数似乎存储在 MultivaluedMap (formParameters) 中,并且 & 符号被解释为值分隔符(如在查询字符串中),因此调用 formParameters.get(getName( )) 仅返回到该位置(显示 formParameter 值显示了 toString() 中用逗号分隔的多个值)。我怀疑当请求正文被解释为填充 formParameter 映射时,它会将值解析为查询字符串并在每个&符号处分隔内容。

    我确定使用不同的转义机制,所以 & 号是 %26 或其他东西,所以它将整行作为一个字符串,我将全部设置。

    我想这一切都取决于解析器在任何给定上下文中的视角,对于表单参数,它正在考虑查询字符串格式(当然)。

    【讨论】:

    • 回想起来,MediaType application/x-www-form-urlencoded 应该提供了线索...
    • 在客户端使用 URLEncoder.encode(requestValue,"UTF-8"),在服务器使用 URLDecoder.decode(formParamValue,"UTF-8") 就可以了。
    【解决方案2】:

    表单参数使用&amp; 分隔。您应该以与对 URL 而非 XML/HTML 相同的方式对内容进行转义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      • 2017-08-31
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多