编码参数作为URL-Alternate选项传递?

时间:2016-04-06 05:10:46

标签: java url encoding url-encoding

我在URL中传递String值 例如: http://localhost:8080/webservice/useradmin/a%bghijlk123/0978+gh

字符串" ab%ghijlk123 / 0978 + gh"打破网址。 有哪些方法可以解决这个问题。 编码字符串是唯一的选择吗?必须进行最少的代码更改。任何服务器端配置都可以用来实现这个目标吗? 请提供建议。

1 个答案:

答案 0 :(得分:1)

  

编码字符串是唯一的选择吗?

这是唯一正确的选择。

使用URLEncoder.encode("ab%ghijlk123/0978+gh", "UTF-8")
这将为您提供ab%25ghijlk123%2F0978%2Bgh,其完整网址为:

http://localhost:8080/webservice/useradmin/ab%25ghijlk123%2F0978%2Bgh

网址http://localhost:8080/webservice/useradmin/a%bghijlk123/0978+gh无效。

网址规范(RFC3986)表示路径段(由/分隔的值)可能只包含:

ALPHA:           "a"-"z", "A"-"Z"
DIGIT:           "0"-"9"
Special chars:   - . _ ~ ! $ & ' ( ) * + , ; = : @
pct-encoded:     "%" HEXDIG HEXDIG

因为它们具有其他含义而必须被禁止的值是:/(路径分隔符),?(查询开始),#(片段的开头)和{ {1}}(以2位十六进制编码字符开头)。

如您所见,%符号仅允许作为百分比编码字符,因此%会使该网址无效。

如果%bg之后的部分应该是 useradmin/,那么必须进行编码,如上所示。

如果服务器将其拒绝为" 400:错误请求",则服务器出错。