致访客
感谢各位一年多的陪伴,因内容调整,本站将于近日迁移到新域名并不再更新主要内容。
特此通知。
感谢各位一年多的陪伴,因内容调整,本站将于近日迁移到新域名并不再更新主要内容。
特此通知。
概述
由于三方模块的限制,项目中某个页面必须使用GET请求提交参数
但提交的参数中有特殊字符#
,服务端接收到的参数值只有#
之前的内容
同理,当参数值中含有?!=()#%&
这类特殊字符时都会丢失其后的内容
请求地址示例:http://localhost/module/function?param1=value123#456#789
解决方法
使用JavaScript的encodeURIComponent
函数可以对字符串进行编码,使用方式如下:
let param1 = '123#456#789';
log.debug(encodeURIComponent(param1));
注意
之所以不使用JavaScript的escape
函数,是因为escape
函数针对的是对字符串进行编码,而非URL编码。
另外,encodeURI
也可以用于解决这个问题,但encodeURIComponent
相对于encodeURI
函数而言具有更大的编码范围,测试如下。
let url = "https://blog.wanvale.com/module/function?param1=123#456/789 spacing-end";
encodeURI(url)
encodeURIComponent(url)
输出结果如下
"https://blog.wanvale.com/module/function?param1=123#456/789%20spacing-end"
"https%3A%2F%2Fblog.wanvale.com%2Fmodule%2Ffunction%3Fparam1%3D123%23456%2F789%20spacing-end"
对于不同的用途,一定要选择正确的函数。