慕田峪4524236
其实有区别。 php的urlencode将星号*转换为*,而java的则保留。 我以前在与接口对接时踩过这个洞。 复选标记失败,因为urlencode结果不匹配
以下是基于php和java的RFC2396中规定的9个非预约符号的处理结果,可以看出*和~的处理不同
RFC2396中未保留字符的说明
datacharactersthatareallowedinauributdonothaveareservedpurposearecalledunreserved.theseincludeupperandlowercaseletters,decaseleters
未保留=alpha num |简单蜡烛
简单的蜡烛='-' | '_' | '.' |! ('|'~'|'*'|''|||'|' () ) ) () ) ) ) ) ) ) )
unreservedcharacterscanbeescapedwithoutchangingthesemanticsoftheuri,butthisshouldnotbedoneunlesstheurisbeingusedinaconacontexttttttttheuri
补充
上面的PHP截图不小心写了rawurlencode,既然是在问urlencode,就需要补充urlencode的执行结果
可见,urlencode和URLEncoder的非保留字符处理的区别只表现在符号“*”上。 值得注意的是,百度搜索“urlencode和rawurlencode的区别”后发现,搜索到的博文基本上只提到了“”处理的区别,没有提到“~”
上述代码执行结果基于某个在线工具,不排除在不同环境(语言版本)中执行的结果不一致的可能性