如何在URL(Webview)中使用特殊字符?

时间:2015-12-17 20:08:45

标签: android url android-webview rfc

我目前正在开发一个使用以下约定通过webview对用户进行身份验证的项目: https://username:password@domain.com

当用户拥有包含特殊字符的密码时,就会出现问题。我一直在寻找可能的解决方案。

我在收到身份验证请求时尝试使用handler.proceed但是无法使用该方法取得任何成功。

web视图loadURL方法只接受一个字符串,这个字符串是否自动进行URL编码?

我目前使用String.format(https://%s:%s@domain.com,用户名,密码)来格式化String

我的问题是可以在密码中使用带有特殊字符的当前约定。

这似乎只是运行任何低于4.4的操作系统的设备的问题

编辑:澄清。

1 个答案:

答案 0 :(得分:0)

  

web视图loadURL方法只接受一个字符串,这个字符串是否自动进行URL编码?

没有。这将导致不希望的结果。以您自己的网址为例:

  

https://username:password@domain.com

如果在加载之前将其进行url编码,则会变成类似:

https%3A%2F%2Fusername%3Apassword%40domain.com

显然,这没有多大意义。

  

我目前使用String.format(https://%s:%s@domain.com)来格式化String。 (...)是否可以使用密码中包含特殊字符的当前约定。

当然,请确保您对实际的用户名和密码进行了网址编码。例如,假设用户名是电子邮件地址:someone@somewhere.com,密码包含一些“特殊”字符:@bc:d。您当前的字符串格式化程序会将您的网址转换为:

https://someone@somewhere.com:@bc:d@domain.com

现在,显而易见的是,这看起来并不合适。相反,对用户名和密码进行url编码会将其转换为

https://someone%40somewhere.com:%40bc%3Ad@domain.com

这是一个完全合法的网址。编码的用户名和密码可以/然后在接收端再次解码。

要在Android上执行网址编码,请查看URLEncodedUri.encode()