decodeURI()和encodeURI()
2012-05-02 11:21 呦菜 阅读(1095) 评论(0) 编辑 收藏 举报在了解以下内容之前先来了解一下什么是URI。
Web上可用的每种资源 - HTML文档、图像、视频片段、程序等 - 由一个通用资源标志符(Uniform Resource Identifier, 简称"URI")进行定位。 URI 可以是Uniform Resource Locator (URL)或Uniform Resource Name(URN)的形式,URL和URN是URI的子集。
encodeURI()
URI中的转义字符
摘要:
encodeURI(uri)
参数:
uri: 一个字符串,含有URI或其它要编码的文本。
返回值:uri的副本,其中某些字符被十六进制的转义字符序列替换了。
抛出:
URIError: 说明uri中含有格式化错误的Unicode替代对,不能被编码。
描述:
encodeURI()是全局函数,返回参数uri的编码副本。ASCII的字母和数字不编码,此外下面的ASCII标点符号也不编码:
- _ . ! ~ * ' ()
因为encodeURI()的目的是给URI进行完整的编码,所以一下在URI中又特殊意义的ASCII标点符号也不转义:
; / ? : @ & = + $ , #
uri中得其他字符都将转换成它的UTF-8编码字符,然后用十六进制的转义序列(形式为%xx)对生成的一个、两个或三个字节的字符编码,用它们替换uri中原有的字符。在这种编码模式中ASCII字符由一个%xx转义字符替换,在\u0080到\u07ff之间编码的字符由两个转义序列替换,其它的16位Unicode字符由三个转义序列替换。
如果使用该方法编码URI,应该确保URI组件(如查询字符串)中不含有URI分隔符,如?和#。如果组件中含有这些符号,应该用encodeURIComponent()方法分别对各个组件编码。
用方法decodeURI()可以对该方法进行解码操作。在ECMAScript v3之前,可以用escape()和unescape()方法(反对使用)执行相似的编码解码操作。
例子:
var uri = "http://www.cnblogs.com/youcai/admin&hello world"; document.write(encodeURI(uri)); // http://www.cnblogs.com/youcai/admin&hello%20world document.write(encodeURI("\u00a9")); // %C2%A9
decodeURI()
URI中为转义的字符
摘要:
decodeURI(uri)
参数:
uri: 一个字符串,含有编码的URI或要其他要解码的文本。
返回值:
uri的副本,其中十六进制的转义序列被它们表示的字符替换。
抛出:
URIError: 说明uri的一个或多个转义序列被错误的格式化,不能被正确解码。
描述:
decodeURI()是一个全局函数,它返回uri解码后的
副本。它将保留encodeURI()方法执行的编码操作。
例子:
var uri = "http://www.cnblogs.com/youcai/admin&hello world"; var encodeUri = encodeURI(uri); document.write(encodeUri); // http://www.cnblogs.com/youcai/admin&hello%20world/admin&hello%20world document.write("<br>"); document.write(decodeURI(encodeUri )); // http://www.cnblogs.com/youcai/admin&hello world
encodeURIComponent()
转义URI组件中的字符
摘要:
encodeURIComponent(s)
参数:
s: 一个字符串,含有URI的一部分或其它要编码的文本。
返回值:
s的副本,其中某些字符被十六进制的转义序列替换了。
抛出:
URIError: 说明s中含有格式化错误的Unicode替代对,不能被编码。
描述:
encodeURIComponent()是全局函数,返回参数s的编码副本。ASCII的字母和数字不编码,此外下面的ASCII标点符号也不编码:
- _ . ! ~ * ' ()
其他字符(像/ 、: #这样用于分割URI各种组件的标点符号 ),都由一个或多个十六进制的转义序列替换。
注意encodeURIComponent()和encodeURI()之间的差别,前者假定它的参数是URI的一部分,因此,它将转义用于分割URI各个部分的标点符号。
例子:
var uri = "hello world?"; document.write(encodeURI(uri)); // hello%20world? document.write("<br>"); document.write(encodeURIComponent(uri)); // hello%20world%3F
decodeURIComponent()
URI组件中的未转义字符
摘要:decodeURI(s)
参数:
s: 一个字符串,含有编码URI组件和其他要解码的文本。
返回值:
s的副本,其中十六进制的转义序列被它们所表示的字符替换。
抛出:
URIError: 说明s中的一个或多个转义序列被错误的格式化,不能被正确解码。
描述:
decodeURIComponent()是一个全局函数,它返回参数s解码后的副本。它将保留encodeURIComponent()方法执行的编码操作。
例子:
var uri = "hello world?"; var encodestr = encodeURIComponent(uri); document.write(encodestr); // hello%20world%3F document.write("<br>"); document.write(decodeURIComponent(encodestr)); // hello world?