Java字符转义问题

错误案例

图片验证在url包含特殊字符比如”abc%2B”的情况下始终无法通过

错误分析

开始以为是验证码服务器的问题,结果和平台那边联调的时候发现我们传过去的abc%2B 变成了abc%252B,这个当然有问题,我们起初认为了httpclient的版本问题,我们怀疑httpclient可能对输入的url再次转义,后来我在本地测试httpclient2和httpclient3的时候都没发现问题,最终还是发现了程序中的问题

转义之前: abc+

第一次转义:

String sessionID = StringEscapeUtil.escapeURL(random); -> abc%2B

abc+ -> abc%2B


第二次转义:

checkCodeCheckURIBroker.addQueryData("sessionID", sessionID);
checkCodeCheckURIBroker.addQueryData("code", checkcode.toUpperCase());
  // 生成url
url = checkCodeCheckURIBroker.render();

abc%2B -> abc%252B

原来是程序中作了两次转义导致的问题

正确用法

构造url的时候(特别是包含特殊字符)转义或者说编码是必须的,但只需一次。有时候我们应该多少了解某些函数是否将我们的传递的字符进行了转义或者编码,这样可以避免多次调用引起问题。

测试关注点

关于java转义,这是一个很明显的错误,开发人员在开发环境就可以测出来,无需测试人员参与


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值