A-A+

Javascript中encodeURI与encodeURIComponent区别

2016年10月17日 web前端设计 暂无评论 阅读 7 views 次

本文章来给大家详细介绍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代码:

  1. <script type="text/javascript">  
  2. var tst="http://你的域名/My dir/?a=http://metsky.com/b&c=你好";  
  3. document.write(tst+ "<br />");  
  4. var a=encodeURI(tst);//xiariboke.com  
  5. var b=decodeURI(a);  
  6. document.write(a+ "<br />");  
  7. document.write(b+ "<br />");  
  8. var c=encodeURIComponent(tst);  
  9. var d=decodeURIComponent(c);  
  10. document.write(c+ "<br />");  
  11. document.write(d);  
  12. </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可能是直接使用的。

标签:

给我留言