URL中%5B%5D转换为%5B0%5D序列的原因及移动端异常咨询
这问题我之前在处理移动端Web兼容性时碰到过类似情况,大概率是移动端浏览器/框架/WebView的参数序列化逻辑差异导致的,具体拆解几个核心原因:
移动端浏览器的URL参数规范适配
%5B%5D是URL编码后的[],这类写法常用来表示数组类型的请求参数(比如?filters[]=hot&filters[]=new)。部分移动端浏览器(比如安卓部分内置浏览器、iOS旧版Safari)对这类“无索引数组参数”的兼容性处理更严格,会自动把空的[]补成带递增索引的形式([0]、[1])——因为它们默认遵循更严格的参数传递标准,认为数组参数必须带索引才能被后端正确解析,而桌面端浏览器对这种“宽松写法”的兼容性更好,允许保留空括号。前端框架的移动端表单序列化规则
如果你的网站使用了Vue、React这类前端框架,或者jQuery等旧版工具库,它们的移动端适配模块可能会统一处理URL参数。比如一些表单序列化插件在移动端模式下,会自动将空数组括号转换为带索引的形式,避免部分后端框架(比如PHP旧版本)无法识别[]格式的数组参数,而桌面端则保留原始写法以兼容更多场景。APP内嵌WebView的拦截修改
要是你是在APP的内嵌WebView中打开链接,那大概率是APP的WebView配置了参数拦截规则。很多原生APP为了统一后端接收参数的格式,会在WebView的请求拦截器里对URL做修改,把空的[]依次替换为[0]、[1]这类带索引的形式,确保后端能正确解析数组参数;而桌面端直接用浏览器访问,没有这个拦截修改的环节,所以不会出现问题。
快速验证建议
你可以用Chrome DevTools的移动端模拟模式访问链接,如果模拟时也出现同样的转换,那问题出在浏览器或前端框架;如果只有真实移动端设备才出现,那基本可以锁定是设备内置浏览器或APP WebView的特殊处理。
内容的提问来源于stack exchange,提问作者meena

