url中传递url参数|url中特殊字符&、?、=无法解析问题

  • 1、微信小程序报错:SyntaxError: Unexpected end of JSON input
  • 2、错误场景复现
  • 3、错误原因及解决方案
    • 3.1 错误原因解析
    • 3.2 解决方案
  • 4、参考文献

1、微信小程序报错:SyntaxError: Unexpected end of JSON input

思路:起因是需要用url传递json对象,无法直接传递。因此将json对象转换为String以url方式传递,然后在target页面进行解析。例如:

http://127.0.0.1:8080/myWeb?type=isLogin&url=http://localhost:8080/shop/admin?order_id=17347001822420000002&is_timeout=&is_history=no&staffId=123

// 1、转换成string
let stuffObj = JSON.stringify(stuff);
console.log(stuffObj);wx.navigateTo({url: '../updateOrDelProducts/index?stuffObj=' + stuffObj
});// 2、解析string
let stuff = JSON.parse(options.stuffObj);

then…

2、错误场景复现

stuff对象中有一个img数组,是存放url的数组。

img: ['https://656e-env-9eb476-1258886794.tcb.qcloud.la/images/tx4.jpg?sign=9817258738b68c534b35fbfc04bde928&t=1553372736','https://656e-env-9eb476-1258886794.tcb.qcloud.la/images/tx2.jpg?sign=6e1e8eec2c2fc497e3b2ac03b367e770&t=1553372700','https://656e-env-9eb476-1258886794.tcb.qcloud.la/images/tx3.jpg?sign=32821196ccfd12115af3d64dc7d67132&t=1553372724'],

3、错误原因及解决方案

3.1 错误原因解析

URL参数中是不能出现+ % # & = ? /等特殊字符的,因为这些字符在URL中有默认的含义,比如&在URL中表示参数间的分隔符,如果不将&转义而直接放在url里,后端的Tomcat就会以这个&为分隔符将参数拆分掉。
如果要传递这些特殊字符给后端,需要将它们转义。转码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。例如 +号的编码值是"%2B"。
下表中列出了一些URL特殊符号及编码:

特殊字符 在url中默认含义 转义码
+ URL 中+号表示空格 %2B
空格 %20
/ 分隔目录和子目录 %2F
? 分隔实际的 URL 和参数 %3F
% 指定特殊字符 %25
# 表示书签 %23
& URL中指定的参数间的分割符 %26
= URL中指定参数的值 %3D

3.2 解决方案

// ? -> %3F
// = -> %3D
// & -> %26
let urls = item.img;
if(urls != undefined && urls != ''){for(let i=0;i<urls.length;i++){urls[i] = urls[i].replace(/\?/g,"%3F");urls[i] = urls[i].replace(/\=/g,"%3D");urls[i] = urls[i].replace(/\&/g,"%26");}console.log(urls);
}
let stuffObj = JSON.stringify(stuff);

再解析成json对象:

let stuff = JSON.parse(options.stuffObj);
// console.log(options);// console.log(stuff);let urls = stuff.img;if(urls != undefined && urls != ''){for(let i=0;i<urls.length;i++){urls[i] = urls[i].replace(/\%3F/g,"?");urls[i] = urls[i].replace(/\%3D/g,"=");urls[i] = urls[i].replace(/\%26/g,"&");}console.log(urls);}this.setData({stuff:stuff});
},

4、参考文献

  • url参数基础知识
  • https://blog.csdn.net/czx2018/article/details/103323120
  • url传递参数的例子

url中传递url参数|url中特殊字符、?、=无法解析问题相关推荐

  1. Js的Url中传递中文参数乱码的解决

    一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面 Javascript代码: 2. 接收参数页面:test02.html 二:如何获取Url ...

  2. url中传递对象参数_在URL参数中传递复杂对象

    url中传递对象参数 假设您想传递原始数据类型,例如复杂的Java对象 java.util.Data,java.lang.List,泛型类,数组以及通过URL参数所需的所有内容,以便在页面加载后在任何 ...

  3. linux中probe函数中传递的参数来源(上)

    点击打开链接 上一篇中,我们追踪了probe函数在何时调用,知道了满足什么条件会调用probe函数,但probe函数中传递的参数我们并不知道在何时定义,到底是谁定义的,反正不是我们在驱动中定义的(当然 ...

  4. 【若依(ruoyi)】向DAO中传递动态参数

    前言 若依(ruoyi): v4.3 向DAO中传递动态参数 比如,mapper中这样定义selectUserList: <select id="selectUserList" ...

  5. C++中传递数组参数

    C++中传递数组参数 将数组作为参数进行传递有两种传递方法,一种是function(int a[]); 另一种是function(int *a).这两种两种方法在函数中对数组参数的修改都会影响到实参本 ...

  6. el-upload 组件在 on-success 文件上传成功的钩子中传递更多参数

    el-upload 组件在 on-success 文件上传成功的钩子中传递更多参数 <el-table-columnlabel="附件"align="center& ...

  7. Mybatis的Mapper方法中传递map参数的写法

    Mybatis的Mapper方法中传递map参数的写法 当我们在进行数据分页查询时,如果想让Mybatis的分页查询返回Map对象的集合,我们需要在查询的方法上使用单个参数或者使用Map对象作为参数进 ...

  8. url中传递中文参数时的转码与解码

    URL传递中文参数时的几种处理方式,总结如下: 1.将字符串转码:newString("xxxxx".getBytes("iso-8859-1")," ...

  9. java单元测试 规范,java – 在spock单元测试规范中传递实际参数

    org.spockframework:spock-core:0.7-groovy-2.0 Gradle 1.12 Groovy 1.8.6 java 你好, 我正在尝试使用spock和我的java应用 ...

  10. vector 作为dll 接口参数_DLL中传递STL参数,vector对象作为dll参数传递等问题(转)...

    STL使用模板生成,当我们使用模板的时候,每一个EXE,和DLL都在编译器产生了自己的代码,导致模板所使用的静态成员不同步,所以出现数据传递的各种问题,下面是详细解释. 原因分析:一句话-----如果 ...

最新文章

  1. 每日一皮:项目开发停在了最后10%的效果...
  2. .net core ——微服务内通信Thrift和Http客户端响应比较
  3. LeetCode 797. 所有可能的路径(DFS)
  4. 基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba的企业级微服务敏捷开发系统架构
  5. mysql可以用视图insert_MySql-视图操作
  6. ES6学习笔记03:变量的解构赋值
  7. Go语言(二)—基本概述
  8. 剑指offer——面试题45:圆圈中最后剩下的数字(孩子们的游戏)
  9. Kali2.0中peda与pwntools的安装
  10. Codeforces Round #574 (Div. 2)
  11. 孔浩javacript基础笔记一
  12. 品优购-01分布式框架-Dubbox
  13. Netty中ChannelOption属性含义
  14. Crime HDU - 4623(状压DP,不同进制转换)
  15. 表中数据的更改量保存视图
  16. 《读书是一辈子的事》上篇 认识自己
  17. airsim 安装指导(无人机、无人车视觉导航仿真平台)
  18. 什么是阻塞式和非阻塞io流?
  19. 织梦Dede如何删除管理员admin
  20. HTML实现公告文字滚动效果

热门文章

  1. 打开excel显示php拓展名,新建xls文件提示扩展名不一致
  2. python接口自动化测试六:时间戳,防重复处理
  3. Direct2D 如何关闭抗锯齿
  4. c# 在winform中为DataGridView头部标题添加ContextMenuStrip菜单
  5. Servlet的HTTP状态码
  6. Nodejs nmp 常用命令
  7. nginx的 CPU参数worker_processes和worker_cpu_affinity使用说明
  8. 4.Python标准库_文件管理 (部分os包,shutil包)
  9. mysql weblogic_weblogic连mysql的问题
  10. snmp基本介绍--理解OID/MIB/snmp报文类型/snmp版本