Kros的博客 Kros的博客
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云

Kros

凡心所向,素履以往,生如逆旅,一苇以航
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云
  • CSS

  • JavaScript

    • 兼容ie7的水平无限滚动
    • 节流防抖
    • 数组乱序
    • 开启全屏
    • 数据类型
    • 变量提升
    • this调用指向
    • 原型及原型扩展
    • js获取元素属性精度问题
    • setTimeout和setInterval
    • 数组判断
    • dom节点添加或插入元素
    • var、let和const的区别
    • 判断ellipsis是否省略生效
    • 使用ResizeObserver监听元素size变化
    • js自定义事件
    • use strict详解
    • 私有属性
    • js实现类的方式
    • call和apply的理解和使用
    • js失焦和点击事件顺序冲突
    • js中不常见但非常实用的运算符
    • for of和for in的区别
    • defer和async的区别
    • promise值穿透
    • js为什么会出现数字精确度丢失
    • js禁用F12开发者模式
    • 使用scrollTop和scrollTo滚动到目标位置
    • js实现打字机效果
    • 多种方式实现数组去重
    • 替换使用setTimeout
    • encodeURI和encodeURIComponent的区别
      • canvas实现弹跳小球
      • js实现跨标签页通信
      • 事件循环与微任务、宏任务
      • 浏览器存储数据方式
      • 常见的meta元数据使用
      • 使用InterSectionObserver判断元素区域(chatGPT)
    • 工具

    • Vue

    • antdv踩坑记录

    • Vue3

    • 前端
    • JavaScript
    kros
    2025-08-14

    encodeURI和encodeURIComponent的区别

    encodeURI 和 encodeURIComponent 都是 JavaScript 中用于编码 URI(统一资源标识符)的函数,但它们的编码范围不同,适用于不同的场景。

    # 主要区别

    特性 encodeURI encodeURIComponent
    编码范围 保留完整的 URI 结构 编码所有可能影响 URI 组件的字符
    保留的字符 ; , / ? : @ & = + $ # 仅保留字母、数字和 - _ . ! ~ * ' ( )
    使用场景 编码完整 URI 编码 URI 的组成部分(如查询参数)

    # 详细说明

    # 1. encodeURI

    • 用于编码完整的 URI
    • 不会编码 URI 中有特殊意义的字符(保留字符):
      A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #
      
      1
    • 主要用于编码整个 URL,保持其可访问性
    const url = "https://example.com/路径?name=值&age=20";
    console.log(encodeURI(url));
    // 输出: "https://example.com/%E8%B7%AF%E5%BE%84?name=%E5%80%BC&age=20"
    // 注意 ? & = 等符号没有被编码
    
    1
    2
    3
    4

    # 2. encodeURIComponent

    • 用于编码URI 的组成部分(如查询参数值)
    • 会编码更多字符,包括保留字符:
      仅不编码: A-Z a-z 0-9 - _ . ! ~ * ' ( )
      
      1
    • 适用于编码将要作为 URI 组件使用的字符串
    const param = "值&x=1";
    console.log(encodeURIComponent(param));
    // 输出: "%E5%80%BC%26x%3D1"
    // & 和 = 也被编码了
    
    1
    2
    3
    4

    # 何时使用哪个

    • 使用 encodeURI 当你需要编码整个 URL 但保持其结构完整:

      const fullUrl = "https://example.com/path?query=值";
      const encodedUrl = encodeURI(fullUrl);
      
      1
      2
    • 使用 encodeURIComponent 当你需要编码 URI 的特定部分(如查询参数):

      const param = "name=值";
      const query = "?param=" + encodeURIComponent(param);
      
      1
      2

    # 实际应用示例

    // 构建带查询参数的 URL
    const baseUrl = "https://example.com/search";
    const query = "coffee&tea";
    const page = 1;
    
    // 错误方式 - 使用 encodeURI
    const badUrl = baseUrl + "?q=" + encodeURI(query) + "&page=" + page;
    // 结果: "https://example.com/search?q=coffee&tea&page=1"
    // & 会被解释为新的参数分隔符,导致错误
    
    // 正确方式 - 使用 encodeURIComponent
    const goodUrl = baseUrl + "?q=" + encodeURIComponent(query) + "&page=" + page;
    // 结果: "https://example.com/search?q=coffee%26tea&page=1"
    // & 被正确编码为 %26
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    # 总结

    记住这个简单规则:

    • 需要编码整个 URL → 用 encodeURI
    • 需要编码URL 的一部分(特别是查询参数值)→ 用 encodeURIComponent

    对应的解码函数是 decodeURI 和 decodeURIComponent,它们遵循相同的区别原则。

    上次更新: 2025/09/05, 8:09:00
    替换使用setTimeout
    canvas实现弹跳小球

    ← 替换使用setTimeout canvas实现弹跳小球→

    最近更新
    01
    Find the next perfect square
    09-05
    02
    Regex validate PIN code
    09-05
    03
    Find the odd int
    09-05
    更多文章>
    Theme by Vdoing | Copyright © 2020-2025 kros king
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    icon-heart-o icon-heart icon-infinity icon-pause icon-play link next prev