encodeURIComponent 的作用和encodeURI的区别

首先解释下 encodeURIComponent 的作用:将文本字符串编码为一个有效的统一资源标识符 (URI)。
为什么要用这个是因为我想把 username 整个当做参数传递给 CGI, 而不让 CGI 将 username 分割掉。这话听不明白的话我换种方式来说,如果 username = 'a&foo=boo' 而不用 encodeURIComponent 的话,整个参数就成了 name=a&foo=boo, 这样 CGI 就获得两个参数 name 和 foo. 这不是我们想要的。
Javascript 里还有个同样功能的函数 encodeURI, 但是此方法不会对下列字符进行编码:":"、"/"、";" 和 "?"。

我终于弄明白这个函数是干什么的了。

### encodeURIComponentencodeURI区别 #### 基本概念 `encodeURI` 是一种用于对完整的 URI(Uniform Resource Identifier)进行编码的方法。它会保留那些在 URI 中具有特殊意义的字符,比如 `:`、`/`、`?` 等[^2]。 相比之下,`encodeURIComponent` 更加严格,专门用来对 URI 组件(如查询参数中的键或值)进行编码。这意味着它不仅会对非法字符进行转义,还会对 URI 特殊字符(如 `?`、`=`、`&` 等)进行编码[^3]。 --- #### 编码范围对比 | 字符 | 是否被 `encodeURI` 转义 | 是否被 `encodeURIComponent` 转义 | |------|-------------------------|-------------------------------| | A-Z, a-z, 0-9 | 否 | 否 | | ~ ! @ # $ & ( ) = : / ? ; , ' + | 否 | 是 | | 所有其他非 ASCII 字符 | 是 | 是 | 通过表格可以看出,`encodeURI` 对于某些特殊的 URI 符号不会进行编码,而这些符号会被 `encodeURIComponent` 处理[^4]。 --- #### 使用场景分析 1. **使用 `encodeURI`** 当需要对整个 URL 或者路径部分进行编码时,可以选择 `encodeURI`。这通常发生在 URL 已经是一个有效的地址结构的情况下,仅需对其内部可能存在的非法字符进行保护。 示例: ```javascript const url = "https://example.com/path?name=John Doe"; console.log(encodeURI(url)); // 输出: https://example.com/path?name=John%20Doe ``` 2. **使用 `encodeURIComponent`** 如果目标是对 URL 查询字符串中的单独组件(例如参数名或者参数值)进行编码,则应当采用 `encodeURIComponent` 来确保每个组成部分都符合标准并能安全地嵌入到最终形成的 URL 中。 示例: ```javascript const paramValue = "John Doe"; const encodedParam = encodeURIComponent(paramValue); console.log(encodedParam); // 输出: John%20Doe const fullUrl = `https://example.com/search?q=${encodedParam}`; console.log(fullUrl); // 输出: https://example.com/search?q=John%20Doe ``` --- ### 总结 为了保证 URL 完整性数据准确性,在不同情境下合理选用这两种方法至关重要。对于整体 URI 需要维持原有语义时不改变其构成元素的意义可用 `encodeURI`; 若针对具体某一段落文字作为变量传参则推荐运用更为严格的 `encodeURIComponent` 函数来完成相应操作[^4]. ```javascript // Example of using both functions together const baseUrl = "http://www.example.com/resource?"; const key = "query"; const value = "special chars like @#$%^&*()"; let safeKey = encodeURIComponent(key); let safeValue = encodeURIComponent(value); console.log(`${baseUrl}${safeKey}=${safeValue}`); // Output: http://www.example.com/resource?query=special%20chars%20like%20%40%23%24%25%5E%26%2A%28%29 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值