我承认我们通过使用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's impact on traffic" />
在“Square project”之后被截断
转义的字符是:
"&" becomes "&"
"\"" (double quote) becomes """
"'" (single quote) becomes "'"
"<" becomes "<"
">" becomes ">"
bytes < 0x20 or > 0x7f" become "&#nnn;"
答案 0 :(得分:1)
在进行了一些挖掘之后,似乎表单参数存储在MultivaluedMap(formParameters)中,并且&符号被解释为值分隔符(如在查询字符串中),因此调用formParameters.get(getName( ))仅返回到该位置(显示formParameter值显示在toString()中用逗号分隔的多个值)。我怀疑当请求体被解释为填充formParameter映射时,它将该值解析为查询字符串并将每个&符号的内容分开。
我确定使用不同的转义机制,因此&符是%26或者其他什么,所以它将整行作为单个字符串,我将全部设置。
我猜这一切都取决于任何给定上下文中解析器的视角,而对于形式参数,它正在考虑查询字符串格式化(当然)。
答案 1 :(得分:0)
使用&
分隔表单参数。您应该以与为URL而不是XML / HTML相同的方式转义内容。