我有这样的网址: 产品//摘录?特征=图像+模式
当我从浏览器访问此URL时,后端会收到以下请求: “产品//摘录?特征=图像+模式”
在Web服务器端,我使用+作为分隔符。所以feature = picture + modes意味着有2个功能:图片和模式
我创建并自动化了脚本(Java),它转到url并检索其内容。 当我运行此脚本时,后端会收到以下请求: “产品/ B000NK6J6Q /摘录/特征=图片%2Bmodes”
这是因为在我的脚本(Java)中,我使用URLEncoder.encode将+转换为%2B并将此编码的url发送到服务器。
为什么Java提供的urlEncoders和浏览器(FF / IE)提供的urlEncoders不同。 我如何让他们一样?我如何解码它们? (URLDecoder.decode上的'+'给出空格) 另外,根据惯例(和规范?)使用'+'作为分隔符?
PRAC
答案 0 :(得分:4)
你所看到的实际上是正确的。请参阅维基百科上的Percent encoding。 +
字符是保留字符,因此需要编码为%2B
。此外,历史上浏览器对使用MIME类型application/x-www-form-urlencoded
提交的表单使用不同形式的百分比编码,其中空格变为+
而不是%20
。
如果您想在网址中使用+
,那么您的分隔符应该是后端的空格。如果您想在后端使用+
,那么您在网址中会有%2B
。