本文详细解析 JavaScript 中用于 URI 编码的全局函数,包括 encodeURI、encodeURIComponent 以及已废弃的 escape 系列。重点说明各方法对特殊字符的处理差异、适用场景及注意事项,帮助开发者正确选择编码策略以避免请求错误。
encodeURIComponent 方法
该操作旨在将文本字符串转换为统一资源标识符(URI)的有效组成部分。
encodeURIComponent(encodedURIString)
参数 encodedURIString 为必选值,代表一个已经过编码处理的 URI 组件字符串。
说明
encodeURIComponent 方法返回一个经过编码的 URI 字符串。若将此结果传递给 decodeURIComponent,即可还原为原始字符串。需要注意的是,由于该方法会对所有字符进行编码,若字符串表示路径(如 /folder1/folder2/default.html),其中的斜杠也会被编码,导致发送至 Web 服务器的请求无效。若字符串包含多个 URI 组件,应改用 encodeURI 方法进行编码。
escape 方法
escape 方法
该方法返回一个可在所有计算机上读取的编码 String 对象。
function escape(charString : String) : String
参数
charString
必选参数,指代需要编码的任意 String 对象或文本内容。
备注
escape 方法返回包含 charstring 内容的字符串值(采用 Unicode 格式)。所有空格、标点符号、重音符号及其他非 ASCII 字符均被替换为 %xx 编码形式,其中 xx 为该字符对应的十六进制数值。例如,空格被编码为“%20”。
对于字符值大于 255 的字符,采用 %uxxxx 格式进行存储。
注意:escape 方法不应用于对“统一资源标识符”(URI)进行编码。正确的做法是使用 encodeURI 和 encodeURIComponent 方法。
要求
版本 1
请参见
encodeURI 方法 | encodeURIComponent 方法 | String 对象 | 方法
适用于:Global 对象
encodeURI 方法
encodeURI 方法
该方法返回编码为有效统一资源标识符(URI)的字符串。
function encodeURI(URIString : String) : String
参数
URIString
必选参数,表示待编码的 URI 字符串。
备注
encodeURI 方法返回一个已编码的 URI。若将编码结果传递给 decodeURI,可还原为初始字符串。encodeURI 不会对以下字符进行编码:“:”、“/”、“;”和“?”。若需对这些字符编码,请使用 encodeURIComponent。
要求
版本 5.5
请参见
decodeURI 方法 | decodeURIComponent 方法
适用于:Global 对象
encodeURIComponent 方法
encodeURIComponent 方法详解
该方法返回编码为统一资源标识符(URI)有效组件的字符串。
function encodeURIComponent(encodedURIString : String) : String
参数
encodedURIString
必选参数,表示已编码 URI 组件的字符串。
备注
encodeURIComponent 方法返回一个已编码的 URI。若将编码结果传递给 decodeURIComponent,可还原为初始字符串。由于该方法对所有字符进行编码,若字符串代表路径(例如 /folder1/folder2/default.html),其中的斜杠也会被编码,导致发送至 Web 服务器的请求无效。若字符串包含多个 URI 组件,请使用 encodeURI 方法进行编码。
要求
版本 5.5
请参见
decodeURI 方法 | decodeURIComponent 方法
适用于:Global 对象
decode 系列方法
方法
从使用 escape 方法编码的 String 对象中返回已解码的字符串。
function (charString : String) : String
参数
charString
必选参数,指代需要解码的 String 对象或文本。
备注
该方法返回包含 charstring 内容的字符串值。所有以 %xx 十六进制形式编码的字符,均替换为 ASCII 字符集中等效的字符。
以 %uxxxx 格式(Unicode 字符)编码的字符,替换为十六进制编码 xxxx 对应的 Unicode 字符。
注意:该方法不应用于解码“统一资源标识符”(URI)。请改用 decodeURI 和 decodeURIComponent 方法。
要求
版本 1
请参见
decodeURI 方法 | decodeURIComponent 方法 | escape 方法 | String 对象
适用于:Global 对象
decodeURI 方法
decodeURI 方法
该方法返回已编码统一资源标识符(URI)的非编码形式。
function decodeURI(URIstring : String) : String
参数
URIstring
必选参数,表示已编码的 URI 字符串。
备注
建议使用 decodeURI 方法替代已过时的 escape 相关方法。
decodeURI 方法返回一个字符串值。
若 URIString 无效,将抛出 URIError 异常。
要求
版本 5.5
请参见
decodeURIComponent 方法 | encodeURI 方法
适用于:Global 对象
decodeURIComponent 方法
decodeURIComponent 方法
该方法返回统一资源标识符(URI)的一个已编码组件的非编码形式。
function decodeURIComponent(encodedURIString : String) : String
必选的 encodedURIString 参数是一个表示已编码 URI 组件的值。
备注
URIComponent 是完整 URI 的一部分。
若 encodedURIString 无效,将产生 URIError 异常。
要求
版本 5.5
请参见
decodeURI 方法 | encodeURI 方法
[html] <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Js encode,decode</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> </head> <body> <textarea id=code cols=80 rows=20> </textarea><br> <input type=button onclick=encode() value=编码> <input type=button onclick=run() value=执行> <input type=button onclick=decode() value=解码> </body> </html> [Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]
[/html]
更多对照可以参考下面的这篇文章 JavaScript 全局对象参考手册