encodeURI()使用说明

URI编码解析
本文详细介绍了JavaScript中的encodeURI()函数,该函数用于对URI进行编码,避免了对ASCII字母、数字及特定标点符号的编码,但会保留URI中具有特殊含义的ASCII标点符号。通过实例展示了如何使用此函数对不同的URI进行编码。

      说明:encodeURI() 函数可把字符串作为 URI 进行编码。URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( )。
        该方法的目的是对 URI 进行完整的编码,因此对以下在URI 中具有特殊含义的 ASCII 标点符号,encodeURI()函数是不会进行转义的:;/?:@&=+$,#

实例:
在本例中,我们将使用 encodeURI() 对 URI 进行编码:
<script type="text/javascript">
document.write(encodeURI
("http://www.w3school.com.cn")+ "<br />")
document.write(encodeURI
("http://www.w3school.com.cn/My first/"))
document.write(encodeURI(",/?:@&=+$#"))
</script>
输出:
http://www.w3school.com.cn
http://www.w3school.com.cn/My%20first/
,/?:@&=+$#

<think>我们正在讨论JavaScript中的encodeURI函数。根据用户的问题,他们想了解这个函数的作用。结合之前的对话历史,用户之前询问了关于charCodeAt和toString(16)的作用,现在转向URI编码。根据引用[1][2][3]中提供的信息,我们知道JavaScript中有三个用于编码的函数:escape,encodeURI,和encodeURIComponent。用户特别询问的是encodeURI函数。因此,我们需要解释encodeURI的作用,它与其他两个函数的区别,以及它的使用场景。参考引用[2]:“encodeURIencodeURIComponent的作用及应用。js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent”引用[3]也提到了这些函数用于URI编码解码。具体到encodeURI函数:-它用于对整个URI进行编码。-它不会对URI中的保留字符进行编码,例如:,/?:@&=+$#(这些字符在URI中有特殊意义)-它会编码除了上述保留字符以及字母数字之外的其他字符,比如空格会被编码成%20,中文字符会被编码成%xx的形式。而encodeURIComponent则用于编码URI的组成部分(比如查询字符串的参数),它会对更多的字符进行编码,包括保留字符(除了字母数字和-_.!~*'())。因此,在回答中,我们需要清晰说明encodeURI的作用,并举例说明。同时,根据系统指令,需要在回答末尾生成相关问题。注意:由于之前用户的问题中提到了中文字符,我们可以用中文字符作为例子。举例:encodeURI("http://example.com/测试")会编码成"http://example.com/%E6%B5%8B%E8%AF%95"步骤:1.定义:encodeURI函数用于编码整个URI,使其成为有效的URI格式。2.特点:不会编码保留字符和字母数字,但会编码其他字符(如空格、非ASCII字符等)。3.与encodeURIComponent的区别:后者用于编码URI的一部分(如查询参数),会对保留字符也进行编码。4.使用场景:当需要将整个URI作为字符串使用时,确保URI中可能包含的非保留字符(如中文)被正确编码。由于用户要求使用中文回答,并且按照格式,我们将结构清晰化。另外,引用标识:我们在引用站内引用时,在相关内容后加上[^1][^2][^3],但是注意,我们引用的内容主要来自引用[2]和[3]。按照用户上次的问题,他们引用了[1][2][3],但我们的回答主要参考了引用[2]和引用[3],所以我们在相关说明后标注。最后生成相关问题。注意:在回答中,避免使用Markdown标题,但是可以使用加粗等强调,但用户要求“回答结构清晰”,我们可以使用分段和小标题(但用户没有具体规定格式,所以按照正常叙述即可)。但是,注意用户要求:使用中文回答,行内公式用$...$,独立公式用$$...$$(虽然这个问题可能没有数学公式,但如果有就需要按照规则)。然而,在URI编码中,我们可能需要表示百分比编码,比如%20,这不算数学公式,所以不用LaTeX。但为了符合要求,我们可以将一些表示强调的文本用LaTeX行内公式形式,比如保留字符列表,我们可以用$...$包裹,但实际上这些字符不需要用数学公式,直接列出即可。所以,我们按照以下结构:1.首先给出encodeURI函数的定义和作用。2.解释其特点(编码哪些,不编码哪些)。3.举例说明使用一个包含中文的URL)。4.与encodeURIComponent的对比(简要说明)。5.使用场景。6.注意事项(比如它不能编码单引号,所以不适用于包含单引号的URI?但实际上,单引号在URI中不是保留字符,所以不会被编码?需要确认。)实际上,根据标准,encodeURI不会编码:保留字符:;,/?:@&=+$非转义字符:字母数字和-_.!~*'()数字符号:#但是,注意:encodeURI不会编码单引号('),因为它在URI中并不具有特殊含义。但是,在HTML中,如果属性值是用单引号包裹的,则内部如果出现单引号需要转义,但这是HTML层面的,与URI编码无关。因此,我们按照标准来解释。另外,注意escape函数已经废弃,所以不需要过多讨论。让我们开始组织回答。</think> ### JavaScript `encodeURI` 函数详解 #### 1. **核心作用** `encodeURI()` 用于将**完整 URL 或 URI 字符串**转换为有效的 URI 格式,确保特殊字符(如空格、中文)不会破坏 URI 结构。 - **关键行为**: - 对非法字符进行百分比编码(如 `空格` → `%20`) - **保留** URI 分隔符:``; , / ? : @ & = + $`` [^1][^2] - **编码**非英文字符:如 `"测试"` → `"%E6%B5%8B%E8%AF%95"` #### 2. **与 `encodeURIComponent` 的区别** | 函数 | 编码范围 | 适用场景 | |----------------------|--------------------------|----------------------| | `encodeURI` | 非保留字符 | 整个 URL 编码 | | `encodeURIComponent` | **所有非字母数字字符** | URL 组成部分(如参数)[^2][^3] | **示例对比**: ```javascript const url = "https://example.com/搜索?q=JavaScript&测试"; console.log(encodeURI(url)); // 输出: "https://example.com/%E6%90%9C%E7%B4%A2?q=JavaScript&%E6%B5%8B%E8%AF%95" console.log(encodeURIComponent(url)); // 输出: "https%3A%2F%2Fexample.com%2F%E6%90%9C%E7%B4%A2%3Fq%3DJavaScript%26%E6%B5%8B%E8%AF%95" ``` #### 3. **使用场景** - **场景 1**:构造含中文的完整 URL ```javascript const path = "/用户/张三"; const safeURL = "https://api.com" + encodeURI(path); // 结果: "https://api.com/%E7%94%A8%E6%88%B7/%E5%BC%A0%E4%B8%89" ``` - **场景 2**:避免空格破坏链接 ```javascript encodeURI("https://site.com/page name.html"); // 结果: "https://site.com/page%20name.html" ``` #### 4. **注意事项** 1. **不编码保留字符**: 如 `?`、`=` 在查询参数中保留原样,确保 URI 结构完整[^1]。 2. **不适用查询参数**: 需用 `encodeURIComponent` 单独编码参数值,避免 `&`、`=` 混淆: ```javascript const param = "name=张三&age=20"; const fullURL = "https://api.com/search?" + encodeURIComponent(param); // 正确: "https://api.com/search?name%3D%E5%BC%A0%E4%B8%89%26age%3D20" ``` 3. **不处理已编码字符**: 重复调用不会双重编码(如 `%20` 保持原样)。 #### 5. **解码函数** - 对应解码函数:`decodeURI()` ```javascript decodeURI("https://api.com/%E5%BC%A0%E4%B8%89"); // 还原: "https://api.com/张三" ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值