Keep on going, never give up.

JavaScript encodeURI、encodeURIComponent区别

encodeURI、encodeURIComponent是JavaScript里常用的两个URI编码函数,对应的解码函数为decodeURI和decodeURIComponent,但是在处理URI上还是有些区别,本文做个比较。

一、encodeURI、encodeURIComponent概念比较

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

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

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

二、encodeURI、encodeURIComponent测试代码

1、测试JS代码:

<script type="text/javascript">
var tst="http://www.example.com/My dir/?a=http://example.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://www.example.com/My dir/?a=http://example.com/b&c='你好'

http://www.example.com/My%20dir/?a=http://example.com/b&c='%E4%BD%A0%E5%A5%BD'

http://www.example.com/My dir/?a=http://example.com/b&c='你好'

http%3A%2F%2Fwww.example.com%2FMy%20dir%2F%3Fa%3Dhttp%3A%2F%2Fexample.com%2Fb%26c%3D'%E4%BD%A0%E5%A5%BD'

http://www.example.com/My dir/?a=http://example.com/b&c='你好'

3、总结

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

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

详细参考:

http://www.w3school.com.cn/js/jsref_encodeURI.asp

http://www.w3school.com.cn/js/jsref_encodeURIComponent.asp

更多文章:

Javascript同时兼容IE和FIREFOX的一些注意点

用Javascript实现网页内容水平或垂直滚动

使用Javascript为网站增加日期时间展示

javascript获取容器对象的位置信息

相关评论(0):  

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

最新文章

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载也必须遵循“署名-非商业用途-保持一致”的创作共用协议. 返回顶部
Copyright@2005-2016 Metsky.com, All rights Reserved.