一尘不染

如何对URL进行编码以避免Java中的特殊字符?

java

我需要使用Java代码对URL进行编码,以避免使用特殊字符,例如空格和%和&… etc


阅读 284

收藏
2020-09-08

共1个答案

一尘不染

URL的构造很棘手,因为URL的不同部分对允许使用什么字符有不同的规则:例如,加号保留在URL的查询部分中,因为它表示空格,但在URL的路径部分中保留了一个空格。加号没有特殊含义,空格编码为“%20”。

RFC2396解释(在2.4.2节中),完整的URL始终采用其编码形式:您获取各个组件(方案,权限,路径等)的字符串,并根据其自己的规则对每个组件进行编码,然后将它们组合成完整的URL字符串。尝试构建完整的未编码URL字符串然后对其进行单独编码会导致一些细微的错误,例如路径中的空格被错误地更改为加号(符合RFC的服务器会将其解释为真实的加号,而不是编码的空格)。

在Java中,构建URL的正确方法是使用URI类。使用将URL组件作为单独的字符串的多参数构造函数之一,它将根据该组件的规则正确地转义每个组件。该toASCIIString()方法为您提供了正确转义的编码字符串,可以将其发送到服务器。要_解码_ URL,请URI使用单字符串构造函数构造一个对象,然后使用访问器方法(例如getPath())来检索已解码的组件。

不要URLEncoder上课!尽管有名称,该类实际上执行HTML表单编码,而不是URL编码。这是
正确的串联未编码字符串,使一个“未编码”的网址,然后通过它通过URLEncoder。这样做会导致问题(尤其是上述关于路径中的空格和加号的问题)。

2020-09-08