代码之家  ›  专栏  ›  技术社区  ›  Rodrigo Borba

Request.getParameter()只替换“”的“+”

  •  0
  • Rodrigo Borba  · 技术社区  · 6 年前

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

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

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

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

    我用Jetty引擎Servlet容器在灵活的环境下使用App Engine。

    也许我正在寻找的答案是什么使“+”替换为“”和@don't的字符集。

    1 回复  |  直到 6 年前
        1
  •  1
  •   skomisa    6 年前

    对于现有的预定义链接,如果希望在服务器上的查询字符串中保留加号,则只需替换查询字符串中的每个事件即可。 + 具有 %2B级 .

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

    如果你这样做了:

    • request.getQueryString() 将返回“ 参数=@a%2Bb “(即原始价值)。
    • request.getParameter("param") 将返回“ @a+b “这大概就是你想要的。

    显然,这不是一个通用的解决方案,您无法控制提交的url以及它们是如何提交的,但是我使用几个不同的浏览器(Postman和curl)验证了它。

    此外,用户通常希望并期望将查询字符串中的加号字符转换为空格,但上面建议的更改不会以任何方式阻碍这种转换。