Javascript中encodeURI与encodeURIComponent区别

encodeURI 方法

将文本字符串编码为一个有效的统一资源标识符 (URI)。

encodeURI(URIString)

必选的 URIString 参数代表一个已编码的 URI。

说明
encodeURI 方法返回一个编码的 URI。如果您将编码结果传递给 decodeURI,那么将返回初始的字符串。encodeURI 方法不会对下列字符进行编码:":"、"/"、";" 和 "?"。请使用 encodeURIComponent 方法对这些字符进行编码。

encodeURIComponent 方法

将文本字符串编码为一个统一资源标识符 (URI) 的一个有效组件。

encodeURIComponent(encodedURIString)

必选的 encodedURIString 参数代表一个已编码的 URI 组件。

说明
encodeURIComponent 方法返回一个已编码的 URI。如果您将编码结果传递给 decodeURIComponent,那么将返回初始的字符串。因为 encodeURIComponent 方法对所有的字符编码,请注意,如果该字符串代表一个路径,例如 /folder1/folder2/default.html,其中的斜杠也将被编码。这样一来,当该编码结果被作为请求发送到 web 服务器时将是无效的。如果字符串中包含不止一个 URI 组件,请使用 encodeURI 方法进行编码

一、encodeURI、encodeURIComponent概念比较
encodeURI —— 该函数不对 ASCII 字母和数字以及ASCII标点符号(包括- _ . ! ~ * ' ( ))进行编码,其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),也不会被转义。

encodeURIComponent —— 该函数也不对 ASCII 字母和数字以及ASCII标点符号(包括- _ . ! ~ * ' ( ))进行编码,其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),会被由一个或多个十六进制组成的转义序列替换。

decodeURI和decodeURIComponent是它们对应的解码函数,不再多说。下面看一下测试代码

二、encodeURI、encodeURIComponent测试代码
1、测试JS代码:

 代码如下 复制代码

<script type="text/javascript">
var tst="http://你的域名/My dir/?a=http://metsky.com/b&c=你好";
document.write(tst+ "<br />");

var a=encodeURI(tst);
var b=decodeURI(a);
document.write(a+ "<br />");
document.write(b+ "<br />");

var c=encodeURIComponent(tst);
var d=decodeURIComponent(c);
document.write(c+ "<br />");
document.write(d);
</script>

2、脚本输出:

 代码如下 复制代码

http://你的域名/My dir/?a=http://metsky.com/b&c='你好'

http://你的域名/My%20dir/?a=http://metsky.com/b&c='%E4%BD%A0%E5%A5%BD'

http://你的域名/My dir/?a=http://metsky.com/b&c='你好'

http%3A%2F%2F你的域名%2FMy%20dir%2F%3Fa%3Dhttp%3A%2F%2Fmetsky.com%2Fb%26c%3D'%E4%BD%A0%E5%A5%BD'

http://你的域名/My dir/?a=http://metsky.com/b&c='你好'

3、总结

留意一下上面输出中的红色部分,所以从表观上的解释(天缘自己理解*_*):

encodeURIComponent是把整个参数都当成一个Component处理了,认为你给我的东西后续使用时是“贴”在其它“标准”URI后面做参数值用的,而encodeURI则认为你就让我编码一个URI,这个URI可能是直接使用的。

时间: 2024-10-09 07:43:22

Javascript中encodeURI与encodeURIComponent区别的相关文章

比较常见的javascript中定义函数的区别_javascript技巧

比较常见的javascript中定义函数的区别主要通过以下三个方面给大家讲解,需要的朋友参考下吧 1:调用关键字function来构造 如: function distance(x1,x2,y1,y2) { var dx=x2-x1; var dy=y2-y1; return Math.sqrt(dx*dx+dy*dy); } 2:使用Function()构造函数 如: var f=new Function*"x","y","return x*y"

js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解_javascript技巧

JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数: unescape,decodeURI,decodeURIComponent . 下面简单介绍一下它们的区别 1 escape()函数 定义和用法 escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串. 语法 escape(string) 参数 描述 string 必需.要被转义或编码的字符串. 返回值 已编码的 st

JS 字符串编码函数(解决URL特殊字符传递问题):escape()、encodeURI()、encodeURIComponent()区别详解

转:http://www.cnblogs.com/qiantuwuliang/archive/2009/07/19/1526687.html //该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) . //其他字符(比如 :;/?:@&=+$,# var tDT_Start =$("#DT_Start").val().replace(/:/g,'|'); //将:替代为|,传到后台再转换回来var tD

JavaScript中urlencode与encodeURIComponent函数用法

js 对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent 传递参数时需要使用encodeURIComponent,这样组合的url才不会被#等特殊字符截断. 例如:<script language="javascript">document.write('<a href="/?logout&aid=7&

javascript中encodeURI和decodeURI方法使用介绍_javascript技巧

一.基本概念 encodeURI和decodeURI是成对来使用的,因为浏览器的地址栏有中文字符的话,可以会出现不可预期的错误,所以可以encodeURI把非英文字符转化为英文编码,decodeURI可以用来把字符还原回来.encodeURI方法不会对下列字符进行编码:":"."/".";" 和 "?",encodeURIComponent方法可以对这些字符进行编码. decodeURI()方法相当于java.net.URLD

javascript中encodeURI和decodeURI方法

一.基本概念 encodeURI和decodeURI是成对来使用的,因为浏览器的地址栏有中文字符的话,可以会出现不可预期的错误,所以可以encodeURI把非英文字符转化为英文编码,decodeURI可以用来把字符还原回来.encodeURI方法不会对下列字符进行编码:":"."/".";" 和 "?",encodeURIComponent方法可以对这些字符进行编码. decodeURI()方法相当于java.net.URLD

在JavaScript中call()与apply()区别_javascript技巧

如果没接触过动态语言,以编译型语言的思维方式去理解javaScript将会有种神奇而怪异的感觉,因为意识上往往不可能的事偏偏就发生了,甚至觉得不可理喻.如果在学JavaScript这自由而变幻无穷的语言过程中遇到这种感觉,那么就从现在形始,请放下的您的"偏见",因为这对您来说绝对是一片新大陆,让JavaScrip 好,言归正传,先理解JavaScrtipt动态变换运行时上下文特性,这种特性主要就体现在apply, call两个方法的运用上. 一.方法的定义 call方法: 语法:cal

Javascript中valueOf与toString区别浅析_javascript技巧

前言 基本上,所有JS数据类型都拥有这两个方法,null除外.它们俩解决javascript值运算与显示的问题,重写会加大它们调用的优化. 测试分析 先看一例: 复制代码 代码如下: var aaa = {  i: 10,  valueOf: function() { return this.i+30; },  toString: function() { return this.valueOf()+10; } } alert(aaa > 20); // true alert(+aaa); //

JavaScript中null与undefined区别

null 与 undefined 是 JavaScript 的两个类型,类型的值如下: 类型 值 null 只有一个值 null undefined 只有一个值 undefined null 表示变量取值为 null – 换句话说,取值即不是字符串也不是数字也不是真假值也不是对象. undefined 表示变量已经声明,但未赋值,或赋值 undefined. 比如: var a; // 变量已声明,未赋值 var b = undefined; // 变量已声明,则赋值 undefined a =