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。
我有一个简单的网站(使用 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。