关于BASE64中+号被编码后再通过后台解析变成空格的问题处理
一 问题使用场景
有一串BASE64的用户信息,需要通过URL传递到后台进行验证,当里面带有+号的时候,默认浏览器会对+号进行编码,变成%2B,后台获取后,%2B会decode变成空格,这时候,会造成解析失败的问题出现。
举例:
http://localhost:802/test/index?userinfo=eyJ1c2VyX2xldmVsIjoiXzFfXyx3yXyxfNl8sXzRfIiwibW9iaWxlX3Bob25lIjoiMTgxNzE3OTcwMjAiLCJ1c2VyX3R5cGUiOgAmFtZSI6IuadqOaZi%2Ba6kCIsInVzZXJfY2VydF9sZXZlbCI6IjQiLCJpZF9jYXJkIjoiNDIxMTI1MTk5MTA5MTgwMDM3IiwiaWRfY2FyZF90eXBlIjoiMCJ9&action=&oper=#
当我们通过后台进行:
获取:var userinfo = request.getParameter("userinfo");
这时候就会发现,获取到的 userinfo的值为: eyJ1c2VyX2xldmVsIjoiXzFfXyx3yXyxfNl8sXzRfIiwibW9iaWxlX3Bob25lIjoiMTgxNzE3OTcwMjAiLCJ1c2VyX3R5cGUiOgAmFtZSI6IuadqOaZi a6kCIsInVzZXJfY2VydF9sZXZlbCI6IjQiLCJpZF9jYXJkIjoiNDIxMTI1MTk5MTA5MTgwMDM3IiwiaWRfY2FyZF90eXBlIjoiMCJ9
Zi后面是一个空格,这时候解析decode,就会报错。
进行解码: String loginInfo = new String(Base64.getDecoder().decode(userinfo));
二 处理方式
拼接之前,将 + 号全部替换成 - 号 【注:base64使用的字符为 大小写字母共 52个,0-9共10个,/和+号 共64个,=号作为填充字符使用】
info=info.replaceAll("\\+","-");
处理完成后,在后台直接获取,在decode之前作反向替换:
userinfo=userinfo.replaceAll("-","\\+");
String loginInfo = new String(Base64.getDecoder().decode(userinfo));
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】