我在URL中传递String值 例如: http://localhost:8080/webservice/useradmin/a%bghijlk123/0978+gh
字符串" ab%ghijlk123 / 0978 + gh"打破网址。 有哪些方法可以解决这个问题。 编码字符串是唯一的选择吗?必须进行最少的代码更改。任何服务器端配置都可以用来实现这个目标吗? 请提供建议。
答案 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:错误请求",则服务器出错。