encodeURI, encodeURIComponent,escape 编码对比和区别
来源:互联网 发布:node v8.9.1 x64.msi 编辑:程序博客网 时间:2024/06/06 07:47
二、escape和它们不是同一类
简单来说,escape是对字符串(string)进行编码(而另外两种是对URL),作用是让它们在所有电脑上可读。
编码之后的效果是%XX或者%uXXXX这种形式。
其中 ASCII字母、数字、@*/+ ,这几个字符不会被编码,其余的都会。
最关键的是,当你需要对URL编码时,请忘记这个方法,这个方法是针对字符串使用的,不适用于URL。
事实上,这个方法我还没有在实际工作中用到过,所以就不多讲了。
三、最常用的encodeURI和encodeURIComponent
四、最重要的,我该什么场合用什么方法
encodeURI("http://www.cnblogs.com/season-huang/some other thing");
"http://www.cnblogs.com/season-huang/some%20other%20thing";
其中,空格被编码成了%20。但是如果你用了encodeURIComponent,那么结果变为
"http%3A%2F%2Fwww.cnblogs.com%2Fseason-huang%2Fsome%20other%20thing"
看到了区别吗,连 "/" 都被编码了,整个URL已经没法用了。
3、当你需要编码URL中的参数的时候,那么encodeURIComponent是最好方法。如果字符串中包含不止一个 URI 组件,请使用 encodeURI 方法进行编码。
var param = "http://www.cnblogs.com/season-huang/"; //param为参数param = encodeURIComponent(param);var url = "http://www.cnblogs.com?next=" + param;console.log(url) //"http://www.cnblogs.com?next=http%3A%2F%2Fwww.cnblogs.com%2Fseason-huang%2F"
encodeURI, encodeURIComponent 是 UTF-8 的
escape 是 Unicode 的
js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent
1、 传递参数时需要使用encodeURIComponent,这样组合的url才不会被#等特殊字符截断。
例如:
document.write('<a href="http://passport.baidu.com/?logout&aid=7&u='+encodeURIComponent("http://cang.baidu.com/bruce42")+'">退出</a>');
2、 进行url跳转时可以整体使用encodeURI
例如:Location.href=encodeURI("http://cang.baidu.com/do/s?word=百度&ct=21");
3、 js使用数据时可以使用escape
例如:搜藏中history纪录。
4、 escape对0-255以外的unicode值进行编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。
最多使用的应为encodeURIComponent,它是将中文、韩文等特殊字符转换成utf-8格式的url编码,所以如果给后台传递参数需要使用encodeURIComponent时需要后台解码对utf-8支持(form中的编码方式和当前页面编码方式相同)
escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z
encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z
更多可查看:
https://aotu.io/notes/2017/06/15/The-mystery-of-URL-encoding/?o2src=juejin&o2layout=compat
http://www.haorooms.com/post/js_escape_encodeURIComponent
- encodeURI, encodeURIComponent,escape 编码对比和区别
- escape(),encodeURI()和encodeURIComponent()区别
- JavaScript编码函数escape()、encodeURI()、encodeURIComponent()区别
- js 编码escape()、encodeURI()、encodeURIComponent()区别详解
- 编码方式escape、encodeURI和encodeURIComponent
- escape() encodeURI() encodeURIComponent()区别
- escape()、encodeURI()、encodeURIComponent()区别
- escape encodeuri encodeURIComponent 区别
- escape、encodeURI 和encodeURIComponent 的区别
- escape、encodeURI 和encodeURIComponent 的区别
- escape、encodeURI 和 encodeURIComponent 的区别
- escape()、encodeURI()、encodeURIComponent()的区别和用法
- js中escape,encodeURI和encodeURIComponent区别
- escape encodeURI 和encodeURIComponent
- escape encodeURI 和encodeURIComponent
- escape、encodeURI和encodeURIComponent
- encodeURI(),encodeURIComponent()和escape()
- escape()、encodeURI()、encodeURIComponent()区别详解
- 用原生JS实现简单的多选框功能
- 【JavaSE学习笔记】一维数组
- setTimeout和cleartimeout(),再settimeout执行到一半后,正确的使用cleartimeout()删除
- Android---友盟统计集成步骤
- Spark奠基者博士论文中文版
- encodeURI, encodeURIComponent,escape 编码对比和区别
- UML入门 之 交互图 -- 时序图 协作图详解
- 48、不用加减乘除做加法
- CMake 入门实战
- 编写接口返回JSON类型数据
- javaweb项目绝对和相对路径问题
- Android 混淆提示 java.io.FileNotFoundException: ...
- 解决Android中使用webview加载音视频返回后还有声音问题
- MinGW 和 CygWin的比较