Java URL参数将%20替换为空格

Java URL参数将%20替换为空格,java,url-encoding,Java,Url Encoding,在我的网页中,当表单在文本字段中输入空格时,它在后端java代码中被读取为%20,而不是空格。我可以在后端将%20替换回“”,但我认为这不是正确的方法,它可能发生在应用程序中的任何位置 当您提交表单时,是否有更好的方法在前端处理它?您可以将它传递给,这样您不仅可以对%20的问题进行排序,还可以对其他URL编码的值进行排序,这没什么问题。这是URL中字符的转义方式。您应该使用,这是特别合适的,因为尽管它的名称不同,但它确实执行application/x-www-form-urlencoded解码:

在我的网页中,当表单在文本字段中输入空格时,它在后端java代码中被读取为%20,而不是空格。我可以在后端将%20替换回“”,但我认为这不是正确的方法,它可能发生在应用程序中的任何位置


当您提交表单时,是否有更好的方法在前端处理它?

您可以将它传递给,这样您不仅可以对%20的问题进行排序,还可以对其他URL编码的值进行排序,这没什么问题。这是URL中字符的转义方式。您应该使用,这是特别合适的,因为尽管它的名称不同,但它确实执行
application/x-www-form-urlencoded
解码:

String decoded = URLDecoder.decode(queryString, "UTF-8");
然后,您将能够构建一个键/值对的映射,解析URL的查询部分,在
&
上拆分,并使用
=
将键与值分开(也可能是
null

但是请注意,如果URL作为
URI
对象传递,那么它有一个nice,它已经返回了未转换的文本


如果您使用servlet API,您不必转义任何内容,因为有一些很好的方法,例如。

获取
%20
没有什么错。您可以:
URL=URL.replaceAll(“%20”和“)
url=url.value.replace(“%20”和“”);没有更好的办法了。这是标准的HTTP web编码-您应该希望它采用这种格式。这是正确的。有关详细信息,请参阅W3C的编码文档。你不应该这样做;您的框架应该已经为您解决了这一问题。我必须将此应用于每个URL请求吗?对于每个表单提交,是的。您在服务器端使用的框架可能使某些参数映射下的所有内容都可用。我的示例中的UTF-8之所以起作用,是因为解码器必须知道
%20
引用的字符集。“当前URL请求已经是UTF-8”我不知道它的确切含义…请求行(包含主机后面的部分)只能包含ASCII字符的子集。另外,有些字符是特殊的,必须转义。此外,白名单之外的每个字符都必须使用
%XX
进行转义-请参阅没有任何UTF-8字符集。有Unicode集合,UTF-8是一种编码方案。在我的回答中使用的Java API要求从八位字节生成字符。@Fonda-作为警告,您在这里的评论有点粗鲁,所以我删除了它们。拉斐尔只是想通过回答你的问题来帮助你。快点!您可以使用
标准字符集.UTF_8
替换
“UTF-8”
,这样可以避免引发
不支持的编码异常
错误,甚至使用try-catch
 try {
         String result = URLDecoder.decode(urlString, "UTF-8");
     } catch (UnsupportedEncodingException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
     }