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

相关推荐
转转技术团队2 分钟前
VDOM 编年史
前端·设计模式·前端框架
蓝瑟忧伤5 分钟前
前端性能体系的全面升级:现代 Web 如何构建可量化、可治理、可演进的性能架构?
前端·架构
申阳7 分钟前
Day 17:03. 基于 Tauri 2.0 开发后台管理系统-登录页面开发
前端·后端·程序员
二川bro9 分钟前
Python在AI领域应用全景:2025趋势与案例
开发语言·人工智能·python
诸葛亮的芭蕉扇15 分钟前
tree组件点击节点间隙的异常问题分析
前端·javascript·vue.js
CoderYanger29 分钟前
优选算法-队列+宽搜(BFS):72.二叉树的最大宽度
java·开发语言·算法·leetcode·职场和发展·宽度优先·1024程序员节
GinoWi38 分钟前
HTML基本格式 - 第一个HTML网页
前端
顶鲜花的牛粪42 分钟前
Astro 项目升级全栈:EdgeOne Pages 部署指南
前端
疏狂难除1 小时前
随便玩玩lldb (二)
开发语言·后端·rust
0***R5151 小时前
前端云原生
前端·云原生