浏览器url编码不同于java的URLEncoder.encode

时间:2009-12-22 13:16:54

标签: url decode encode space

我有这样的网址: 产品//摘录?特征=图像+模式

当我从浏览器访问此URL时,后端会收到以下请求: “产品//摘录?特征=图像+模式”

在Web服务器端,我使用+作为分隔符。所以feature = picture + modes意味着有2个功能:图片和模式

我创建并自动化了脚本(Java),它转到url并检索其内容。 当我运行此脚本时,后端会收到以下请求: “产品/ B000NK6J6Q /摘录/特征=图片%2Bmodes”

这是因为在我的脚本(Java)中,我使用URLEncoder.encode将+转换为%2B并将此编码的url发送到服务器。

为什么Java提供的urlEncoders和浏览器(FF / IE)提供的urlEncoders不同。 我如何让他们一样?我如何解码它们? (URLDecoder.decode上的'+'给出空格) 另外,根据惯例(和规范?)使用'+'作为分隔符?

PRAC

1 个答案:

答案 0 :(得分:4)

你所看到的实际上是正确的。请参阅维基百科上的Percent encoding+字符是保留字符,因此需要编码为%2B。此外,历史上浏览器对使用MIME类型application/x-www-form-urlencoded提交的表单使用不同形式的百分比编码,其中空格变为+而不是%20

如果您想在网址中使用+,那么您的分隔符应该是后端的空格。如果您想在后端使用+,那么您在网址中会有%2B