Request.getParameter()仅将“ +”替换为“”

时间:2018-07-25 21:31:54

标签: java google-app-engine servlets encoding

尝试在后端检索参数时遇到问题。

我知道URL上有一些保留的字符。但是我已经写了一些链接,其中包含“ +”,“ @”等链接。

例如:www.server.com/?param=@a+b

在后端,req.getParameter(“ param”)返回“ @a b”而不是“ @ a + b”。对于这种情况,“客户端”已经在向服务器发送“ +”字符了吗?

我在具有Jetty servlet容器的灵活环境中使用App Engine。

也许我正在寻找答案,是什么字符集使“ +”被“”和@取代。

1 个答案:

答案 0 :(得分:1)

对于现有的预定义链接,如果要在服务器上的查询字符串中保留加号,则只需将 + 查询字符串中的每个匹配项替换为%2B < / strong>。

例如,代替 www.server.com/?param=@a+b 采用 www.server.com/?param=@a%2Bb

如果您这样做,那么:

  • request.getQueryString()将返回“ param = @ a%2Bb ”(即原始值)。
  • request.getParameter("param")将返回“ @ a + b ”,大概是您想要的。

显然,这不是通用解决方案,您无法控制要提交的URL及其提交方式,但是我使用几种不同的浏览器Postman和curl对其进行了验证。

此外,用户通常希望并希望将查询字符串中的加号字符转换为空格,但是上面建议的更改丝毫不妨碍此操作。