使用URLSearchParams Web API时如何避免双重编码?
解决URLSearchParams双重编码问题
你遇到的问题核心是重复编码:URLSearchParams的set方法本身会自动对参数值执行URL编码,而你额外调用了encodeURIComponent,相当于把已经编码过的内容再编码一次——空格先被encodeURIComponent转成%20,之后URLSearchParams又把%转成%25,最终就变成了%2520。
直接去掉手动的encodeURIComponent调用即可解决问题,修改后的代码如下:
const getUrlParams = (page, pagesize, search) => { const urlParams = new URLSearchParams({ page, pagesize }); if (search && search.length) { // 移除encodeURIComponent,直接传入原始搜索字符串 urlParams.set('search', search); } return urlParams; };
当你传入"name EQ test-1002.dev.net"时,生成的search参数会被正确编码为name%20EQ%20test-1002.dev.net,最终URL就是:https://test.com/cards?page=1&pagesize=10&search=name%20EQ%20test-1002.dev.net
另外补充:后续如果需要获取解码后的参数值,直接用URLSearchParams的get方法即可,它会自动帮你完成解码操作,无需额外处理。
内容的提问来源于stack exchange,提问作者CoderPJ
相关产品推荐
相关产品推荐

