【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环境中则不行。

相关推荐
渴望成为python大神的前端小菜鸟10 分钟前
浏览器及其他 面试题
前端·javascript·ajax·面试题·浏览器
It's now18 分钟前
BeanRegistrar 的企业级应用场景及最佳实践
java·开发语言·spring
1024肥宅20 分钟前
手写 new 操作符和 instanceof:深入理解 JavaScript 对象创建与原型链检测
前端·javascript·ecmascript 6
毕设源码-赖学姐25 分钟前
【开题答辩全过程】以 基于Java的小区物业管理系统APP的设计与实现为例,包含答辩的问题和答案
java·开发语言
繁华似锦respect27 分钟前
C++ & Linux 中 GDB 调试与内存泄漏检测详解
linux·c语言·开发语言·c++·windows·算法
吃肉的小飞猪31 分钟前
uniapp 下拉刷新终极方案
前端
关关长语33 分钟前
Vue本地部署包快速构建为Docker镜像
前端·vue.js·docker
jump68035 分钟前
react的事件优先级
前端
小徐敲java37 分钟前
python的FastAPI框架
开发语言·python·fastapi
soda_yo38 分钟前
浅拷贝与深拷贝: 克隆一只哈基米
前端·javascript·面试