URL传参时,参数包含有特殊字符(%、#、&)的处理方法

问题描述

uniapp项目中页面跳转时,通过url传参,参数为一个包含特殊的字符的对象并内容比较多,导致不能正常传参


原因分析:

1、有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。编码的格式为:%+字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。例如 空格的编码值是"%20"。 
2、url参数有长度限制,参数太长就会显示不全


解决方案:

  1.  参照上面特殊字符对应的编码,使用replace加正则替换
  2. 参数为对象时,使用JSON.stringify()转换成字符串,页面接收时再使用JSON.parse()转换成对象
  3. 参数比较多时且内容复杂使用encodeURIComponent() 转码,decodeURIComponent() 解码,参数需要先JSON.stringify()再转码,页面接受先将参数解码再使用JSON.parse()
let obj = this.list[index] // obj为一个对象内容比较多且包含了特殊字符

1、先替换参数中包含的特殊符号

let formatObj = obj.replace(/\%/g,"%25")
formatObj = obj.replace(/\#/g,"%23")

formatObj = obj.replace(/\&/g,"%26")

formatObj = obj.replace(/\?/g,"%3F")

2、再将参数进行解码再传参        
uni.navigate To({
    url:'/pages/list/detail?item=' + encodeURIComponent(JSON.stringify(formatObj))
})

// 接收页面
onLoad (option) {
    this.info = JSON.parse(decodeURIComponent(option.item))
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值