1

我有一个这样的网址:product//excerpts?feature=picture+modes

当我从浏览器访问此 url 时,后端收到的请求为:“product//excerpts?feature=picture+modes”

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

我创建了自动脚本(Java),它会转到 url 并检索其内容。当我运行此脚本时,后端收到的请求为:“product/B000NK6J6Q/excerpts/feature=picture%2Bmodes”

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

为什么Java提供的urlEncoders和浏览器(FF/IE)提供的urlEncoders不同。我如何使它们相同?我如何解码它们?(URLDecoder.decode 上的“+”提供空间)另外,是否根据约定(和规范?)使用“+”作为分隔符?

实践

4

1 回答 1

4

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

如果您想+在 URL 中使用 a,那么您的分隔符应该是后端的空格。如果您想+在后端使用,那么您将%2B在 URL 中使用。

于 2009-12-22T13:22:06.840 回答