当前位置: 首页 > news >正文

前端url参数拼接和提取

//路由中定义了path='/passage/passageDetails/:index'//那么这里useParams就要是index,index实际上是passageIdconst { index } = useParams<{ index: string }>();// 获取查询参数(URL中的search部分)const location = useLocation();const searchParams = new URLSearchParams(location.search);// 提取各个查询参数const accessTime = searchParams.get('accessTime');const authorName = searchParams.get('authorName');const title = searchParams.get('title');const summary = searchParams.get('summary');const description = searchParams.get('description');const viewNum = searchParams.get('viewNum');const commentNum = searchParams.get('commentNum');const thumbNum = searchParams.get('thumbNum');const collectNum = searchParams.get('collectNum');const isCollect = searchParams.get('isCollect');const isThumb = searchParams.get('isThumb');

location: 

?%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20accessTime=2024-10-24&%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title=%E5%85%B3%E4%BA%8E%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%80%9D%E8%80%83v2&description=[object%20Object]&%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20viewNum=148&commentNum=5&%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20collectNum=23&isCollect=false&%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20summary=%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%80%9D%E8%80%83&isThumb=false&thumbNum=11

searchParams:

++++++++++++++++accessTime=2024-10-24&++++++++++++++++title=%E5%85%B3%E4%BA%8E%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%80%9D%E8%80%83v2&description=%5Bobject+Object%5D&++++++++++++++++viewNum=148&commentNum=5&++++++++++++++++collectNum=23&isCollect=false&++++++++++++++++summary=%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%80%9D%E8%80%83&isThumb=false&thumbNum=11

在你的问题中,URL 的 `location.search` 输出内容和通过 `URLSearchParams` 提取出来的 `searchParams` 输出结果之间的差异,主要原因是 URL 编码和空白字符的处理问题。我们可以逐步分析并解释这些情况:

 1. URL 编码(Percent-Encoding)
URL 编码用于确保 URL 中的特殊字符(如空格、中文字符、等号 `=` 等)能够正确传输。在你的 `location.search` 和 `searchParams` 中,有很多 `%20`(代表空格)和其他 URL 编码的字符(如 `%E5%85%B3` 表示 `关`)。

- **`location.search`**:输出的是原始的 URL 查询字符串,包含了编码后的字符(比如 `%20` 表示空格,`%E5%85%B3` 表示 `关`)。
- **`URLSearchParams`**:当你使用 `URLSearchParams` 对象解析查询字符串时,它会自动解码这些 URL 编码的字符,使得它们变成了可读的字符串。

 2. 多余的空格(`%20`)
在 `location.search` 中,有很多连续的 `%20`(空格的编码形式)。这些多余的空格可能来源于 URL 中的多余空格或错误的拼接,通常不应该在 URL 参数中出现。

```plaintext
?%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20accessTime=2024-10-24&...
```

3. 为什么 `searchParams` 提取出来的参数不一样
`URLSearchParams` 在解析 URL 查询字符串时,自动跳过了多余的空格(`%20`)并且处理了 URL 解码。你看到的 `searchParams` 输出中多了 `++++++++++++++++` 这样的符号,可能是因为你在打印 `searchParams` 时,它将每个查询参数的值作为一个整体处理并加上了分隔符。

4. 有些参数为 `null`
如果你发现通过 `URLSearchParams` 提取出来的某些参数值为 `null`,可能的原因有以下几种:

- **参数没有正确传递**:检查 URL 是否包含所有你期望的参数。有时因为 URL 拼接错误或缺少必要参数,某些参数会缺失,导致提取时返回 `null`。
- **多余的空格干扰**:如果 URL 中有不必要的 `%20`,这些可能会影响参数的正确解析。确保 URL 格式正确并去除多余的空格。

5. 解决办法

#### 1. **去除 URL 中多余的空格**
确保 URL 中没有不必要的空格字符(`%20`)。你可以手动去除或在后台处理 URL。

#### 2. **通过 `URLSearchParams` 获取参数**
使用 `URLSearchParams` 时,它会自动解码查询字符串并正确解析参数。确保你按照正确的方式提取每个参数的值:

```javascript
const urlParams = new URLSearchParams(location.search);

// 获取参数
const accessTime = urlParams.get('accessTime');
const title = urlParams.get('title');
const thumbNum = urlParams.get('thumbNum');
const description = urlParams.get('description');

// 打印参数
console.log(accessTime);  // 2024-10-24
console.log(title);       // 关于学习的”考v2
console.log(thumbNum);    // 11
console.log(description); // [object Object]
```

#### 3. **检查编码问题**
如果某些参数值为 `[object Object]`,可能是因为你在构造 URL 时,将对象作为参数值传递了。URL 参数应是字符串类型,`[object Object]` 是 JavaScript 在将对象转换为字符串时的默认值。

确保 `description` 和其他复杂对象在传递之前先进行序列化。例如,使用 `JSON.stringify()`:

```javascript
const description = JSON.stringify(someObject);
```


文章转载自:

http://i4ITtlva.syrzL.cn
http://bcwlu5Gd.syrzL.cn
http://jiYxq1zT.syrzL.cn
http://fVtmY1Cm.syrzL.cn
http://ZA12DcDj.syrzL.cn
http://Uwsjzwxr.syrzL.cn
http://P9wSV7WC.syrzL.cn
http://eMOmy4En.syrzL.cn
http://hTuCI2HX.syrzL.cn
http://LHhBBSDU.syrzL.cn
http://ykYVRitl.syrzL.cn
http://H3FUeUWP.syrzL.cn
http://EB0NcqLn.syrzL.cn
http://TuEq9Qwd.syrzL.cn
http://E0Dljl2a.syrzL.cn
http://tnqC0GWy.syrzL.cn
http://HwGQ0F4r.syrzL.cn
http://9tIwDvS7.syrzL.cn
http://PRalG3fn.syrzL.cn
http://S7U2MalW.syrzL.cn
http://0lRCwc5F.syrzL.cn
http://vU4oO5Ky.syrzL.cn
http://42VfhbOz.syrzL.cn
http://RH0YyaE4.syrzL.cn
http://kDJruVHT.syrzL.cn
http://SsqADfMd.syrzL.cn
http://QTHSXEo6.syrzL.cn
http://AOZnR7RE.syrzL.cn
http://lis7VJuO.syrzL.cn
http://xFDzH0wS.syrzL.cn
http://www.dtcms.com/a/367640.html

相关文章:

  • Qt 中添加并使用自定义 TTF 字体(以 Transformers Movie 字体为例)
  • 基于STM32的智能家居环境监控系统设计
  • 什么是静态住宅IP 跨境电商为什么要用静态住宅IP
  • 3 步搞定顶刊科研插图!用 GPT-5 反推提示词,Nano Banana 模型一键出图,附实操演示
  • Tengine/Nginx 安装以及模块查看与扩展
  • 新一代实时检测工具——YOLOv13本地部署教程,复杂场景,一目了然!
  • html学习:
  • 多线程顺序打印ABC的两种实现方式:synchronized与Lock机制
  • 苍穹外卖优化过程遇到的问题
  • android源码角度分析Handler机制
  • 25高教社杯数模国赛【E题保姆级思路+问题分析】
  • 政务级数据安全!小陌GEO引擎的私有化部署实践指南
  • 卫星通信+地面网络融合 Sivers半导体毫米波技术打通智慧交通最后一公里
  • 理解进程栈内存的使用
  • C4.5决策树(信息增益率)、CART决策树(基尼指数)、CART回归树、决策树剪枝
  • 前端vue常见标签属性及作用解析
  • Vue基础知识-脚手架开发-子传父-props回调函数实现和自定义事件($on绑定、$emit触发、$off解绑)实现
  • 铭记抗战烽火史,科技强企筑强国 | 金智维开展抗战80周年主题系列活动
  • 无人机信号防干扰技术难点分析
  • 企业白名单实现【使用拦截器】
  • 硬件(二) 中断、定时器、PWM
  • 11 月广州见!AUTO TECH China 2025 汽车内外饰展,解锁行业新趋势
  • 【multisim汽车尾灯设计】2022-12-1
  • 工业人形机器人运动速度:富唯智能重新定义智能制造效率新标准
  • 惊爆!耐达讯自动化RS485转Profinet,电机连接的“逆天神器”?
  • Android 权限管理机制
  • MATLAB平台实现人口预测和GDP预测
  • jQuery的$.Ajax方法分析
  • 实现自己的AI视频监控系统-第三章-信息的推送与共享4
  • Vben5 封装的组件(豆包版)