博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS escape urlencodeComponent urlencode 区别
阅读量:4085 次
发布时间:2019-05-25

本文共 2578 字,大约阅读时间需要 8 分钟。

js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent 


1、   传递参数时需要使用encodeURIComponent,这样组合的url才不会被#等特殊字符截断。                            


例如:<script language="javascript">document.write('<a href="http://passport.baidu.com/?logout&aid=7&u= +encodeURIComponent("http://cang.baidu.com/bruce42")+">退出< /a>');</script> 


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 


回复:javascript  中 escape,encodeURI 区别? 


escape() 方法: 

所有空格、标点符号、重音字符,以及任何其他非ASCII字符都编码改为"%XX"的形式,xx是16进制数字所代表. 

escape和unescape的编码和解码功能, escape返回16进制编码的一种ISO拉丁字符集. unescape的功能将具有特殊值的16进制编码转换为ASCII字符串 

举例: 

escape('!@#$%^&*(){}[]=:/;?+\'"'): 

结果:%21@%23%24%25%5E%26*%28%29%7B%7D%5B%5D%3D%3A/%3B%3F+%27%22 


encodeURI() 方法 

    Encodeuri方法返回一个编码后的URI. 因此,如果你将其结果用Decodeuri方法,原始的串会返回. Encodeuri的方法并不对以下字符编码:":"、"/"、"; "、"? ". 但可以使用 encodeuricomponent 的方法对这些字符进行encode. 

    encodes,一种 Uniform Resource Identifier (URI)(URI)逐一替换某些字符,描述为UTF-8编码的特点. 

    例如 : 

    encodeURI('!@#$%^&*(){}[]=:/;?+\'"'): 

    结果:!@#$%25%5E&*()%7B%7D%5B%5D=:/;?+'%22 


encodeURIComponent() 方法: 

encodeuricomponent 方法返回一个编码的URI. 因此,如果你将decodeuricomponent,原来的串会返回. 由于所有文字encodesencodeuricomponent方法都会进行编码,所以要小心,如果存在路径等串例如: "/FOLDER1/FOLDER2/DEFAULT.HTML". 加密后并不会,如果作为一个网络服务器的请求将会失效. 使用这种方法Encodeuri当字符串超过一个以上URI组成. 

    encodes,一种 Uniform Resource Identifier (URI)(URI)逐一替换某些字符,描述为UTF-8编码的特点. 

例子:最简单的方法就是看它们加密这些字符后生成的代码. 

encodeURIComponent('!@#$%^&*(){}[]=:/;?+\'"'): 

结果 !%40%23%24%25%5E%26*()%7B%7D%5B%5D%3D%3A%2F%3B%3F%2B'%22 



-------------------------------------------------------------------------------- 


回复:javascript  中 escape,encodeURI 区别? 


什么时候适合用什么方法? 


escape() 方法不会加密 + 在服务器端会被解析为空格以及在表单forms区域中的spaces.基于这样的缩减方式,你应该尽可能的避免使用这种方法,二选一的话,最好的经常使用 encodeURIComponent(). 


escape() 不会加密: @*/+ 


使用encodeURI()  比 escape() 稍专业化,它是针对URIs编码的 .一个做为querystring的反面, 属于URL的一个部分.使用这种方法是当你需要将一个字符串转换为URIs资源标识以及需要某些字符保持非encode状态.请记住, 这个' 字符是不会进行编码的,因为它本身就包括在URIs里. 


encodeURI()不会加密: !@#$&*()=:/;?+' 


最后, encodeURIComponent() 方法用在大多数cases中,当你需要对一个单独URIs部件进行编码,这种方法可以加密某些特殊用于的URIs的字符,因此大部分部件可以包含在里面. 记住, ' 字符本身就包括在URIs里,所以不会此方法不会对其进行编码. 


encodeURIComponent() 不会加密: !*()'

http://shijian0306.javaeye.com/blog/241264

转载地址:http://rqhni.baihongyu.com/

你可能感兴趣的文章
ES6这些就够了
查看>>
微信小程序:支付系列专辑(开发指南+精品Demo)
查看>>
iOS应用间相互跳转
查看>>
iOS开发之支付宝集成
查看>>
iOS开发 支付之银联支付集成
查看>>
iOS开发支付集成之微信支付
查看>>
React-Native优化之PureComponent
查看>>
React性能优化总结
查看>>
JSONP - 从理论到实践
查看>>
深入浅出JSONP--解决ajax跨域问题
查看>>
jsonp跨域百度
查看>>
我遇到的前端面试题2017
查看>>
redux深入理解之中间件(middleware)
查看>>
webpack教程
查看>>
immutable日常操作之深入API
查看>>
React渲染问题研究以及Immutable的应用
查看>>
浅谈JavaScript--声明提升
查看>>
Charles网络抓包工具使用教程
查看>>
React 组件模式-有状态组件 x 无状态组件、容器组件 x 展示组件、高阶组件 x 渲染回调(函数作为子组件)
查看>>
Vue2.0 Vuex初始化及歌手数据的配置
查看>>