致访客
感谢各位一年多的陪伴,因内容调整,本站将于近日迁移到新域名并不再更新主要内容。

MENU

JavaScript使用GET请求传递特殊字符

• August 31, 2021 • 经验分享

致访客
感谢各位一年多的陪伴,因内容调整,本站将于近日迁移到新域名并不再更新主要内容。
特此通知。

概述

由于三方模块的限制,项目中某个页面必须使用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"

对于不同的用途,一定要选择正确的函数。