编程语言
首页 > 编程语言> > 如何编码URL以避免Java中的特殊字符?

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

作者:互联网

参见英文答案 > HTTP URL Address Encoding in Java                                    24个
我需要java代码来编码URL以避免使用空格和%和&等特殊字符. …等等

解决方法:

URL构造很棘手,因为URL的不同部分对允许的字符具有不同的规则:例如,加号在URL的查询组件中保留,因为它表示空格,但在URL的路径组件中,加号没有特殊含义,空格编码为“”.

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

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

不要使用URLEncoder类!尽管名称,该类实际上做HTML表单编码,而不是URL编码.连接未编码的字符串以生成“未编码”的URL然后通过URLEncoder传递它是不正确的.这样做会导致问题(特别是前面提到的关于空间和路径中的加号的问题).

标签:url-encoding,java
来源: https://codeday.me/bug/20190916/1808625.html