url中传递url参数|url中特殊字符、?、=无法解析问题
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中特殊字符、?、=无法解析问题相关推荐
- Js的Url中传递中文参数乱码的解决
一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面 Javascript代码: 2. 接收参数页面:test02.html 二:如何获取Url ...
- url中传递对象参数_在URL参数中传递复杂对象
url中传递对象参数 假设您想传递原始数据类型,例如复杂的Java对象 java.util.Data,java.lang.List,泛型类,数组以及通过URL参数所需的所有内容,以便在页面加载后在任何 ...
- linux中probe函数中传递的参数来源(上)
点击打开链接 上一篇中,我们追踪了probe函数在何时调用,知道了满足什么条件会调用probe函数,但probe函数中传递的参数我们并不知道在何时定义,到底是谁定义的,反正不是我们在驱动中定义的(当然 ...
- 【若依(ruoyi)】向DAO中传递动态参数
前言 若依(ruoyi): v4.3 向DAO中传递动态参数 比如,mapper中这样定义selectUserList: <select id="selectUserList" ...
- C++中传递数组参数
C++中传递数组参数 将数组作为参数进行传递有两种传递方法,一种是function(int a[]); 另一种是function(int *a).这两种两种方法在函数中对数组参数的修改都会影响到实参本 ...
- el-upload 组件在 on-success 文件上传成功的钩子中传递更多参数
el-upload 组件在 on-success 文件上传成功的钩子中传递更多参数 <el-table-columnlabel="附件"align="center& ...
- Mybatis的Mapper方法中传递map参数的写法
Mybatis的Mapper方法中传递map参数的写法 当我们在进行数据分页查询时,如果想让Mybatis的分页查询返回Map对象的集合,我们需要在查询的方法上使用单个参数或者使用Map对象作为参数进 ...
- url中传递中文参数时的转码与解码
URL传递中文参数时的几种处理方式,总结如下: 1.将字符串转码:newString("xxxxx".getBytes("iso-8859-1")," ...
- java单元测试 规范,java – 在spock单元测试规范中传递实际参数
org.spockframework:spock-core:0.7-groovy-2.0 Gradle 1.12 Groovy 1.8.6 java 你好, 我正在尝试使用spock和我的java应用 ...
- vector 作为dll 接口参数_DLL中传递STL参数,vector对象作为dll参数传递等问题(转)...
STL使用模板生成,当我们使用模板的时候,每一个EXE,和DLL都在编译器产生了自己的代码,导致模板所使用的静态成员不同步,所以出现数据传递的各种问题,下面是详细解释. 原因分析:一句话-----如果 ...
最新文章
- 每日一皮:项目开发停在了最后10%的效果...
- .net core ——微服务内通信Thrift和Http客户端响应比较
- LeetCode 797. 所有可能的路径(DFS)
- 基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba的企业级微服务敏捷开发系统架构
- mysql可以用视图insert_MySql-视图操作
- ES6学习笔记03:变量的解构赋值
- Go语言(二)—基本概述
- 剑指offer——面试题45:圆圈中最后剩下的数字(孩子们的游戏)
- Kali2.0中peda与pwntools的安装
- Codeforces Round #574 (Div. 2)
- 孔浩javacript基础笔记一
- 品优购-01分布式框架-Dubbox
- Netty中ChannelOption属性含义
- Crime HDU - 4623(状压DP,不同进制转换)
- 表中数据的更改量保存视图
- 《读书是一辈子的事》上篇 认识自己
- airsim 安装指导(无人机、无人车视觉导航仿真平台)
- 什么是阻塞式和非阻塞io流?
- 织梦Dede如何删除管理员admin
- HTML实现公告文字滚动效果
热门文章
- 打开excel显示php拓展名,新建xls文件提示扩展名不一致
- python接口自动化测试六:时间戳,防重复处理
- Direct2D 如何关闭抗锯齿
- c# 在winform中为DataGridView头部标题添加ContextMenuStrip菜单
- Servlet的HTTP状态码
- Nodejs nmp 常用命令
- nginx的 CPU参数worker_processes和worker_cpu_affinity使用说明
- 4.Python标准库_文件管理 (部分os包,shutil包)
- mysql weblogic_weblogic连mysql的问题
- snmp基本介绍--理解OID/MIB/snmp报文类型/snmp版本