servelt 请求参数值包含与号?

use*_*806 1 java url urlencode url-parameters

我在网址下面。

http://localhost:8080/servlet?user=John&message=hai&hello&recipient=scott
Run Code Online (Sandbox Code Playgroud)

在上面的 url 中,我有 3 个请求参数,如下所示。

user=John
message=hai&hello
recipient=scott
Run Code Online (Sandbox Code Playgroud)

这里的问题在于message请求参数的值。因为这里它的值包含符号 (&)。当我尝试时,我request.getParameter("message")只会得到hai但不会hai&hello。我该如何解决这个问题?

谢谢!

Ade*_*ari 5

试试这个,而不是....&message=hi%26hello....。我的意思是,编码它。

[编辑]

正如你所说,你无法控制它,它是遗留应用程序,他们无法修复它;那么你仍然可以,我想,URLEncoder用来编码 URL。

String encodedUrl = URLEncoder.encode(url, "UTF-8");
// Then use encodedUrl as you were using url.
Run Code Online (Sandbox Code Playgroud)

[编辑]

..或者只是把它当作一个String. 很简单,不是吗?

// Please refactor.
String[] paramPart = url.split("?");
String[] params = paramPart[1].split("&");
Map<String, String> paraMap = new HashMap<>();
for(int i=0; i<params.length; i++) {
  String[] keyValue;
  if(params[i].contains("=")) {
    keyValue = params[i].split("=");
    paraMap.put(keyValue[0], keyValue[1]);
  } else {
    params[i-1] = params[i-1] + "&" + params[i];
    keyValue = params[i-1].split("=");
    paraMap.put(keyValue[0], keyValue[1]);
  }
}
Run Code Online (Sandbox Code Playgroud)