今天早些时候,我向this question询问了网址编码问题。
我试图使用spring的UriComponentBuilder编码url查询参数,然后我也尝试了apache commons的UriBuilder。两者都在查询参数中将加号(+
)编码为%2B
,但根据the specification RFC3986(第3.4节),查询参数中允许使用加号。不允许仅限:
*(pchar /“/”/“?”)
所以这将是一个有效的网址
http://www.example.com?foo=bar+baz
但是两个库都转换了+:
http://www.example.com?foo=bar%2Bbaz
之前我从未听说过,并假设+
实际上是编码的whitespace
字符。此外,this answer指出至少春天遵循该规范。
谁是对的?规范,还是spring和apache?或者我只是误解了什么?或者那些库是哪个规范?
旁注
我甚至认为不允许并且不解析编码的字符服务器端是不好的做法,你同意吗?