问题描述

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))
}
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐