新闻中心

JS中URL编码与解码方法详解_j*ascript技巧

2025-10-31
浏览次数:
返回列表
encodeURI用于编码完整URL,保留结构字符,适用于整个链接;encodeURIComponent更严格,编码所有特殊字符,适合参数值;两者对应各自的解码方法,避免乱码。

js中url编码与解码方法详解_javascript技巧

在J*aScript中处理URL时,经常需要对特殊字符进行编码和解码,以确保数据能正确传输。由于URL中不允许出现空格、中文或其他非ASCII字符,必须通过编码转换为合法格式。JS提供了三种常用方法来实现这一功能:encodeURIencodeURIComponentdecodeURIdecodeURIComponent。下面详细介绍它们的用法与区别。

encodeURI:编码完整URL

encodeURI 用于对整个URL进行编码,它会保留URL中的合法结构字符,如冒号、斜杠、问号、井号等,只对非法字符进行转义。

适用场景:当你希望编码一个完整的URL,同时保持其结构完整时使用。

  • 不会被编码的字符包括:: / ? # @ + - _ . ! ~ * ' ( )
  • 会被编码的字符:空格、中文、制表符等

示例:

立即学习“J*a免费学习笔记(深入)”;

星声AI 星声AI

可分享的AI播客内容生成器和效率工具

星声AI 185 查看详情 星声AI

const url = "https://example.com/搜索页面?name=张三";
console.log(encodeURI(url));
// 输出: https://example.com/%E6%90%9C%E7%B4%A2%E9%A1%B5%E9%9D%A2?name=%E5%BC%A0%E4%B8%89

encodeURIComponent:编码URL组件

encodeURIComponent 比 encodeURI 更严格,它会把所有非字母数字字符都编码,包括 &, =, % 等用于分隔参数的符号。

适用场景:用于编码URL中的查询参数值或片段,防止特殊字符破坏参数结构。

  • 几乎所有特殊字符都会被编码
  • 常用于拼接 query 参数时对值进行处理

示例:

立即学习“J*a免费学习笔记(深入)”;

const paramName = "姓名";
const paramValue = "李四&年龄=25";
const encoded = encodeURIComponent(paramName) + "=" + encodeURIComponent(paramValue);
console.log(encoded);
// 输出: %E5%90%8D%E5%AD%97=%E6%9D%8E%E5%9B%9B%26%E5%B9%B4%E9%BE%84%3D25

decodeURI 与 decodeURIComponent:解码操作

这两个方法分别用于还原由 encodeURIencodeURIComponent 编码后的字符串。

  • decodeURI:解码整个URL,适用于之前用 encodeURI 编码的内容
  • decodeURIComponent:解码单独的参数部分,处理更彻底

注意:如果用错解码方法(比如用 decodeURI 去解 encodeURIComponent 的结果),可能导致部分字符无法正确还原。

示例:

立即学习“J*a免费学习笔记(深入)”;

const encodedStr = "%E5%BC%A0%E4%B8%89";
console.log(decodeURIComponent(encodedStr)); // 输出: 张三
console.log(decodeURI("https%3A%2F%2Fexample.com")); // 不推荐,应使用 decodeURIComponent

常见问题与使用建议

实际开发中容易混淆这两个编码方法,以下是一些实用建议:

  • 编码整个URL链接时用 encodeURI
  • 编码URL中的参数值或键时用 encodeURIComponent
  • 不要对已经编码过的字符串重复编码,否则会出现双重编码错误
  • 服务端接收时也要对应解码方式,避免乱码

例如,在拼接带中文参数的请求链接时:

const baseUrl = "https://api.example.com/search";
const query = "城市=北京&类型=住宅";
const url = baseUrl + "?" + Object.keys(obj).map(key =>
`${key}=${encodeURIComponent(obj[key])}`).join("&");

基本上就这些。掌握好 encodeURI 与 encodeURIComponent 的使用时机,能有效避免前端传参中的乱码和解析错误问题。不复杂但容易忽略细节。

以上就是JS中URL编码与解码方法详解_j*ascript技巧的详细内容,更多请关注其它相关文章!


# 时用  # 从化区营销网站建设  # 云索seo矩阵  # 昆明网站seo优化哪家效果好  # 武汉图文营销推广方法  # 津南区营销推广渠道招聘  # 百度推广营销岗位有哪些  # 定制网站建设要求  # 塔城地网站推广  # 昆山企业网站怎么建设  # 烟台seo优化外包  # 内存管理  # 如何实现  # 如何用  # javascript  # 如何使用  # 用它  # 这两个  # 适用于  # 学习笔记  # 特殊字符  # 常见问题  # 区别  # 编码  # 前端  # js  # java 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Win10怎么制作U盘启动盘 Win10系统安装U盘制作教程【详解】  限制HTML日期输入框的日期选择范围  J*a应用集成GitHub CLI与API认证指南  c++中的std::forward_list和std::list有什么不同_c++ forward_list与list区别分析  新三国志曹操传110级星符试炼夏侯渊极难攻略  c++如何使用TBB库进行任务并行_c++ Intel线程构建模块  蛙漫画网页版全站入口 蛙漫热门作品免费浏览  AO3访问入口汇总 AO3网页版同人作品一键直达  Win11怎么开启高性能模式_Windows 11电源计划优化设置  怎么在mac上运行html代码_mac运行html代码方法【指南】  Win11怎么关闭触摸屏_Windows 11禁用HID符合标准触摸屏  Excel Power Pivot如何处理XML数据源 构建高级数据模型  ExcelARRAYTOTEXT函数怎么自定义分隔符输出数组文本_ARRAYTOTEXT实现动态生成SQL语句  C++如何实现一个装饰器模式_C++设计模式之动态地给对象添加额外职责  如何提高微信支付的安全性_微信支付安全防护与设置建议  厨房不锈钢水槽发黑生锈怎么处理_水槽用可乐+锡纸2分钟抛亮如新  如何高效处理PHP中的Excel数据导入导出?PortPHP/Spreadsheet助你轻松搞定!  为什么我的微信朋友圈看不到别人的更新_微信朋友圈更新显示异常解决方法  TikTok搜索结果不显示如何解决 TikTok搜索刷新优化方法  如何在CSS中使用visited与link控制链接颜色_visited link伪类配合  Python实现多节点属性重叠度分析教程  C++如何检测键盘输入_C++ _kbhit与_getch函数非阻塞输入  J*a实现学校排课程序_面向对象结构化项目示例  小红书商家版怎样在笔记嵌入商品卡路径_小红书商家版在笔记嵌入商品卡路径【挂载教程】  Lar*el头像管理:图片缩放与旧文件删除的最佳实践  HTML空白字符处理机制:渲染、DOM与编码实践  Composer的 "conflict" 字段有什么用_如何声明不兼容的包以避免依赖冲突  C++如何实现异步操作_C++11使用std::future和std::async进行异步编程  Tabulator表格日期时间排序问题及自定义解决方案  Windows电脑怎么截图最方便_系统自带截图工具的5种神仙用法【技巧】  CKEditor 5 自定义构建在React应用中渲染失败的调试与解决  C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程  ArchiveofOurOwn小说阅读-ArchiveofOurOwn同人作品访问链接  在J*a中如何隐藏复杂性_使用门面模式组织对象交互  优化 Python 函数中的条件逻辑:解决 if-else 嵌套与参数选择问题  狙击外星人小游戏开始_狙击外星人小游戏立即开始  mcjs网页版流畅运行 mcjs低配电脑畅玩入口  深入理解J*aScript Promise异步执行与微任务队列  C++ typeid如何获取类型信息_C++ RTTI运行时类型识别用法  中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】  小红书网页版入口链接分享 小红书官网直接进  电脑安装程序提示“错误1722”怎么办_Windows Installer服务问题解决【教程】  抖音创作助手登录入口_抖音创作辅助工具官网直达  抓大鹅解压小游戏 抓大鹅摸鱼解压入口  印象笔记怎样用批量导出备知识库_印象笔记用批量导出备知识库【备份方法】  TikTok评论显示延迟如何处理 TikTok评论刷新优化方法  Discord Slash 命令响应超时问题的异步解决方案  Lar*el如何正确地在控制器和模型之间分配逻辑_Lar*el代码职责分离与架构建议  淘宝网网页版登录入口 淘宝官方网页版快捷登录  千牛数据看板网页版_千牛数据看板网页版访问方法 

搜索