URL 中的特殊字符被浏览器忽略

Special character in URL ignored by browsers

我有一个简单的网站(使用 java),其中包含登录和重设密码页面。在重置密码页面中,当提供有效的电子邮件时,将向用户发送一封电子邮件,其中包含 url 用于重置密码页面,其中包含我通过加密某些数据生成的令牌。

我收到了包含正确 url 和正确标记的电子邮件。但token中包含一个特殊字符“+”(有时多次。但目前我只看到这个作为特殊字符)。

但是当我点击 link 时,在 Firefox 中,“+”字符变为空白 space,而在 Chrome,IE 和 safari 中,“+”字符变为空白更改为“%20”。

由于我正在传递此令牌以验证用户是否有效,以重置他的密码,因此我无法解密它。因此,即使对于有效用户,重置密码也会失败。

我通过将字符串替换为黑色 spaces 并将“%20”替换回“+”来进行临时修复。但由于这看起来不像是一个长期的解决方案,有人可以针对这个问题提出更永久的解决方案吗?

示例

Original : http://examplewebsite/resetPassword?token=abcedfg+abcedf+g

Firefox  : http://examplewebsite/resetPassword?token=abcedfg abcedf g

Others   : http://examplewebsite/resetPassword?token=abcedfg%20abcedf%20g

提前致谢

为了在浏览器之间完全统一,您需要通过 URLeconder 传递您的令牌字符串,然后在接收端对查询字符串进行 URL 解码。

在 php 中是:http://php.net/manual/en/function.urlencode.php & http://php.net/manual/en/function.urldecode.php

你使用的是哪种语言,每种语言都有 url 编码器和解码器使用它们,基本上 + 和一些其他字符被编码成 %20% 和其他值,你需要一个 url 解码器用于在解密之前转换回来。

对于java,参考UrlDecoder

示例代码:-

   URLDecoder.decode("special+chars%3A+%26%25*+", "UTF-8") 

+是在URL中编码space的特殊字符。要让它代表自己,您必须将其编码为 %2B。

你的编程语言的标准库可能有URL编码的函数,例如Java中的URLEncoder class。