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

URL参数中携带中文?分享 1 段优质 JS 代码片段!

本内容首发于工粽号:程序员大澈,每日分享一段优质代码片段,欢迎关注和投稿!

大家好,我是大澈!

本文约 800+ 字,整篇阅读约需 1 分钟。

今天分享一段优质 JS 代码片段,在发送 ajax 请求时确保中文参数值被正确解析。

老规矩,先阅读代码片段并思考,再看代码解析再思考,最后评论区留下你的见解!

const params = new URLSearchParams();
params.append('name', encodeURIComponent('张三'));// 使用 Fetch API 发送 POST 请求
fetch('https://example.com/api', {method: 'POST',body: params,headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'}
})

分享原因

这段代码展示了如何使用 URLSearchParams 对象来构建 URL 编码的查询字符串,同时使用 encodeURIComponent 函数来确保参数值中的特殊字符被正确编码。

如果数据是以 JSON 格式传输,那么中文字符不需要额外的编码和解码步骤,因为 JSON 已经包含了对 Unicode 字符的支持。

但如果不是 JSON 格式传输,中文字符就必须用 encodeURIComponent 函数做编码处理,然后在服务端用 decodeURIComponent 做解码处理。

否则,就会出现乱码现象,无法获取正确的中文值。

代码解析

1. const params = new URLSearchParams();

URLSearchParams 主要用于处理 URL 中的查询字符串部分。

它提供了一系列方法来方便地操作查询参数。

一般我都会把 URLSearchParams 与 FormData 一起学习:

FormData 通常用于表单数据的提交,特别是在进行 XMLHttpRequest 或 fetch 请求时。

URLSearchParams 通常在发送数据时,Content-Type 默认为 application/x-www-form-urlencoded 。

FormData 在发送数据时,Content-Type 会根据数据的内容自动设置。

如果包含文件,通常为 multipart/form-data ;如果只是普通的表单字段数据,可能是 application/x-www-form-urlencoded 。

2. params.append('name', encodeURIComponent('张三'));

params.append 方法用于向 URLSearchParams 对象中添加一个键值对。

name 是参数的键。

encodeURIComponent('张三') 是参数的值。

encodeURIComponent 函数用于对 URI 组件(例如查询字符串中的参数值)进行编码,将一些特殊字符转换为可在 URI 中安全传输的形式。

它会对以下字符进行编码:; 、/ 、? 、: 、@ 、& 、= 、+ 、$ 、, 、# 以及所有非 ASCII 字符。

decodeURIComponent 函数则执行相反的操作,将经过 encodeURIComponent 编码的字符串还原为原始的字符串。

http://www.lryc.cn/news/410030.html

相关文章:

  • sass的使用
  • 【足球走地软件】走地数据分析预测【大模型篇】走地预测软件实战分享
  • 现在有什么赛道可以干到退休?
  • c程序杂谈系列(职责链模式与if_else)
  • 前端开发技术之CSS(层叠样式表)
  • go语言day20 使用gin框架获取参数 使用自定义的logger记录日志
  • DHCP笔记
  • TCP为什么需要四次挥手?
  • MySQL 索引相关基本概念
  • Neutralinojs教程项目实战初体验(踩坑指南),干翻 electron
  • 【轻松拿捏】Java-List、Set、Map 之间的区别是什么?
  • 用户史订单查询业务
  • 第8节课:CSS布局与样式——掌握盒模型与定位的艺术
  • electron 主进程和渲染进程
  • redis的高可用及性能管理和雪崩
  • php基础语法
  • js抓取短信验证码发送
  • 视频怎么加密?常见的四种视频加密方法和软件
  • 聚焦全局应用可用性的提升策略,详解GLSB是什么
  • 无水印下载视频2——基于tkinter完成头条视频的下载
  • Java学习Day17:基础篇7
  • Vue3 Pinia的创建与使用代替Vuex 全局数据共享 同步异步
  • 手撕数据结构02--二分搜索(附源码)
  • 单片机工程师继续从事硬件设计还是涉足 Linux 开发?
  • 《昇思25天学习打卡营第25天|第28天》
  • Flutter Dio网络请求报错FormatException: Unexpected character
  • 关于@JsonSerialize序列化与@JsonDeserialize反序列化注解的使用(密码加密与解密举例)
  • 第二届世界科学智能大赛逻辑推理赛道:复杂推理能力评估 #大模型技术之逻辑推理方向 #Datawhale #夏令营 <二>
  • C# 关于Linq延迟查询
  • Navicat For Mysql连接Mysql8.0报错:客户端不支持服务器请求的身份验证协议