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

encodeURI 确保特殊字符能够正确传输

在 JavaScript 中,decodeURIComponentdecodeURIencodeURI 和 encodeURIComponent 是用于编码和解码 URI(Uniform Resource Identifier)的常用函数。它们各有不同的用途和适用场景。

1. encodeURI

encodeURI 用于对整个 URI 进行编码,确保所有特殊字符都被转换为百分号编码形式。

用途
  • 编码整个 URI,包括协议、主机名、路径、查询字符串等。
示例
const uri = "http://example.com/path?query=value&another=value with spaces"; console.log(encodeURI(uri)); // 输出: http://example.com/path?query=value&another=value%20with%20spaces

2. encodeURIComponent

encodeURIComponent 用于对 URI 的各个组成部分(如查询字符串中的值)进行编码。
用途
  • 编码 URI 的各个组成部分,如查询参数的值。
示例
const value = "value with spaces"; console.log(encodeURIComponent(value)); // 输出: value%20with%20spaces

3. decodeURI

decodeURI 用于解码整个编码后的 URI。

用途
  • 解码整个编码后的 URI。
const encodedUri = "http%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dvalue%26another%3Dvalue%2520with%2520spaces"; console.log(decodeURI(encodedUri)); // 输出: http://example.com/path?query=value&another=value%20with%20spaces

4. decodeURIComponent

decodeURIComponent 用于解码 URI 的各个组成部分(如查询字符串中的值)。

用途
  • 解码 URI 的各个组成部分,如查询参数的值。
示例
const encodedValue = "value%20with%20spaces"; console.log(decodeURIComponent(encodedValue)); // 输出: value with spaces

实际应用场景

假设你有一个对象需要通过 URL 查询参数传递,并且需要对其进行编码和解码。

编码对象

<template> <div> <button @click="navigateToCustomsData">Navigate</button> </div> </template> <script> export default { data() { return { obj: { key1: 'value1', key2: 'value with spaces' } }; }, methods: { navigateToCustomsData() { const encodedData = encodeURIComponent(JSON.stringify(this.obj)); const href = this.$router.resolve({ name: 'customsDataScreen', query: { data: encodedData } }).href; window.location.href = href; } } }; </script>

解析对象

<template> <div> <pre>{{ parsedObj }}</pre> </div> </template> <script> export default { data() { return { parsedObj: null }; }, created() { this.parseQueryParams(); }, methods: { parseQueryParams() { const queryParams = this.$route.query; if (queryParams.data) { const decodedData = decodeURIComponent(queryParams.data); try { this.parsedObj = JSON.parse(decodedData); } catch (error) { console.error('Error parsing JSON:', error); this.parsedObj = null; } } } } }; </script>

总结

  • encodeURI:用于编码整个 URI,保留一些特殊字符(如 -_. 和 ~)。
  • encodeURIComponent:用于编码 URI 的各个组成部分(如查询参数的值),对所有特殊字符进行编码。
  • decodeURI:用于解码整个编码后的 URI。
  • decodeURIComponent:用于解码 URI 的各个组成部分(如查询参数的值),对所有特殊字符进行解码。

在实际应用中,根据具体情况选择合适的函数进行编码和解码。对于查询参数的值,推荐使用 encodeURIComponent 和 decodeURIComponent

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 告别手动记录,音频转文字软件助力会议记录新高度
  • 【Android 设备上的所有相关 WiFi 命令和使用方法】
  • 【架构设计】安全架构设计
  • SpringBoot优雅的封装不同研发环境下(环境隔离)RocketMq自动ack和手动ack
  • Python爬虫—常用的网络爬虫工具推荐
  • 3.服务注册_服务发现
  • 口语笔记——非谓语动词
  • 【代码随想录训练营第42期 Day38打卡 - 动态规划Part6 - LeetCode 322. 零钱兑换 279.完全平方数 139.单词拆分
  • MyBatis-Plus联表查询(mybatis-plus-join)
  • 1.ftp简介
  • C++程序调用SetWindowsHookEx全局拦截键盘按键消息和窗口消息的Hook实例分享
  • 相机掉帧采集速度慢怎么办巨型帧9014
  • [随便学学]在doker服务器中实现ssh免密登陆
  • 力扣经典题目之->相同的树(递归判断两颗二叉树是否相同)
  • SpringBoot 一文复习知识点概览
  • 时间复杂度分析经典问题——最大子序列和
  • [case10]使用RSQL实现端到端的动态查询
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • ES10 特性的完整指南
  • Java 多线程编程之:notify 和 wait 用法
  • react-native 安卓真机环境搭建
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 从输入URL到页面加载发生了什么
  • 大主子表关联的性能优化方法
  • 后端_MYSQL
  • 记录:CentOS7.2配置LNMP环境记录
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 我看到的前端
  • 我有几个粽子,和一个故事
  • 一道面试题引发的“血案”
  • 用element的upload组件实现多图片上传和压缩
  • 正则表达式小结
  • ​批处理文件中的errorlevel用法
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #ifdef 的技巧用法
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (30)数组元素和与数字和的绝对差
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (没学懂,待填坑)【动态规划】数位动态规划
  • **PHP分步表单提交思路(分页表单提交)
  • .bat文件调用java类的main方法
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET BackgroundWorker
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .net生成的类,跨工程调用显示注释
  • [20190416]完善shared latch测试脚本2.txt