URLDecoder正在将'+'转换为空格。

13

我的一个查询参数中有一个哈希键,可能与其他特殊字符一起使用加号。问题是当此URL被解码时,URLDecoder将+符号转换为空格。 有没有办法强制URLDecoder不将 "+" 转换为空格。


4
最好的做法不是强制接收方使用非标准行为,而是将发送方修正为正确地将“+”字符编码为参数中的“%2B”。 - Henry
为了安全起见,您应该将 + 编码为 %2B - kennytm
3个回答

13

在解码之前,请对您的字符串执行以下操作:

String plusEncoded = yourString.replaceAll("\\+", "%2b")
解码器应该显示+的地方,代码中缺失了这个符号。

2
有没有可以处理这个问题的实用工具方法,而不是在解码之前手动将“+”替换为UTF-8格式?虽然它可以工作,但代码看起来不太好。 - CHANist

7
根据HTML URL编码参考:
URL不能包含空格。URL编码通常将空格替换为加号(+)或%20。
加号(+)符号本身必须使用%2B进行编码。因此,如果您想将哈希作为GET参数传递到URL中,您应该在哈希中用%2B替换加号。不要替换整个URL中的每个加号(+),因为这可能会破坏其他应包含空格的字符串参数。

0

这个问题有一个类似的错误参考,已经被标记为“不是问题”。我引用一下指派人所说的话:

https://docs.oracle.com/javase/8/docs/api/java/net/URL.html 上的 Java API 文档明确说明:“URLEncoder 和 URLDecoder 类也可以用于 HTML 表单编码,但这与 RFC2396 中定义的编码方案不同。”。这意味着它不适用于 URL 编码,并且会导致路径中的空格和加号出现问题。使用 URL 或 URI 类来构造 URL 将会得到预期的结果。

URL url = new URL(input);
System.out.println(url.toString()); //outputs http://www.example.com/some+thing

参考: https://bugs.openjdk.java.net/browse/JDK-8179507


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接