【js】链接中有多余的&怎么取出参数值

c 复制代码
https://pq.equalearning.net/assessment/379208869278126080?userId=23ebb&origin=https://www.equalearning.net&fname=I'm&lname=happy

在上面的例子中,fname=I'm,其中单引号'被转义为', 而如果使用下面的代码,因为在URL中,&符号是一个特殊字符,用于分隔不同的参数。所以当试图获取fname参数的值时,URLSearchParams对象会在遇到第一个&符号时停止

所以获取fname的值得到的是 I而不是 "I'm"

c 复制代码
let url = 'https://pq.equalearning.net/assessment/379208869278126080?userId=23ebb&origin=https://www.equalearning.net&fname=I'm&lname=happy';
url = decodeURIComponent(url);
let params = new URLSearchParams((new URL(url)).search);

console.log(params.get('fname')); // 输出 "I"

就算使用了decodeURIComponent函数,得到的还是'I'

因为链接中的'不是URI编码的字符,而是HTML实体

在JavaScript中,您可以使用DOMParser API来解码HTML实体

c 复制代码
function decodeHtml(html) {
    var txt = document.createElement("textarea");
    txt.innerHTML = html;
    return txt.value;
}

let url = 'https://pq.equalearning.net/assessment/379208869278126080?userId=23ebb&origin=https://www.equalearning.net&fname=I'm&lname=happy';
url = decodeHtml(url);
let params = new URLSearchParams((new URL(url)).search);

console.log(params.get('fname')); // Outputs "I'm"

在上面的代码中,首先使用decodeHtml函数对URL中的HTML实体进行解码,该函数创建一个临时的textarea元素,并使用其innerHTML属性对HTML实体进行解码。然后,我们创建一个URL对象,并使用URLSearchParams对象来解析查询字符串并获取fname参数的值。

请注意,此解决方案需要DOM环境,因此它可以在浏览器中工作,但在没有DOM实现的Node. js环境中则不行。

相关推荐
wangqiaowq3 小时前
StarRocks安装部署测试
java·开发语言
Jonathan Star6 小时前
沉浸式雨天海岸:用A-Frame打造WebXR互动场景
前端·javascript
缺点内向6 小时前
C#: 高效移动与删除Excel工作表
开发语言·c#·.net·excel
工业甲酰苯胺7 小时前
实现 json path 来评估函数式解析器的损耗
java·前端·json
老前端的功夫7 小时前
Web应用的永生之术:PWA落地与实践深度指南
java·开发语言·前端·javascript·css·node.js
LilySesy7 小时前
ABAP+WHERE字段长度不一致报错解决
java·前端·javascript·bug·sap·abap·alv
ᐇ9598 小时前
Java HashMap深度解析:数据结构、原理与实战指南
java·开发语言·数据结构
QT 小鲜肉8 小时前
【个人成长笔记】在 Linux 系统下撰写老化测试脚本以实现自动压测效果(亲测有效)
linux·开发语言·笔记·单片机·压力测试
Wang's Blog8 小时前
前端FAQ: Vue 3 与 Vue 2 相⽐有哪些重要的改进?
前端·javascript·vue.js
程序员龙一8 小时前
C++之static_cast关键字
开发语言·c++·static_cast