decodeURI和 decodeURIComponent以及encodeURI和encodeURIComponent的区别

url传递参数这是很常见数据传递方式,但如果不注意也是很容易出现问题的。

最常见的就是url传递中文乱码了以及空格被转码,而要避免这种问题出现的最佳解决方案是传递前编码,接收数据后解码。编码我们用encodeURIencodeURIComponent,解码我们用decodeURIdecodeURIComponent

encodeURI() 把字符串编码为 URI。(对应decodeURI)
encodeURIComponent() 把字符串编码为 URI 组件。
decodeURI() 解码某个编码的 URI。对应encodeURI)
decodeURIComponent() 解码一个编码的 URI 组件。(对应encodeURIComponent)

这两种转码和解码方式具体有什么区别呢?看下面几行代码运行结果就知道了:

var urlStr="http://www.coolfish.cn/tag/url中文乱码";
var enURI=encodeURI(urlStr);
var deURI=decodeURI(urlStr);
var enURIC=encodeURIComponent(urlStr);
var deURIC=decodeURIComponent(urlStr);
console.log("初始URL:"+urlStr);
console.log("encodeURI转码:"+enURI);
console.log("decodeURI解码:"+deURI);
console.log("encodeURIComponent转码:"+enURIC);
console.log("decodeURIComponent解码:"+deURIC);

  运行结果:

初始URL:http://www.coolfish.cn/tag/url中文乱码
encodeURI转码:http://www.coolfish.cn/tag/url%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81
decodeURI解码:http://www.coolfish.cn/tag/url中文乱码
encodeURIComponent转码:http%3A%2F%2Fwww.coolfish.cn%2Ftag%2Furl%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81
decodeURIComponent解码:http://www.coolfish.cn/tag/url中文乱码

可以看到encodeURIComponent转码的时候会把uri进行编码(url中的://转码了)。

当我们的url传递类似callbackURL的参数的时候,最好是使用encodeURIComponent和decodeURIComponent来编码和转码。

时间: 2024-10-29 19:07:11

decodeURI和 decodeURIComponent以及encodeURI和encodeURIComponent的区别的相关文章

escape()、encodeURI()、encodeURIComponent()的区别和用法

escape()  解码unescape() 对字符串进行进行编码. 定义和用法 escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串. 语法 escape(String) 参数                      描述 String          必需.要被转义或编码的字符串. 返回值 已编码的 string 的副本.其中某些字符被替换成了十六进制的转义序列. 说明 该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编

escape、encodeURI 和encodeURIComponent 的区别

escape(), encodeURI()和encodeURIComponent()是在Javascript中用于编码字符串的三个常用的方法,而他们之间的异同却困扰了很多的Javascript初学者,今天我就在这里对这三个方法详细地分析与比较一下. escape() 方法 MSDN JScript Reference中如是说: The escape method returns a string value (in Unicode format) that contains the conten

escape、encodeURI和encodeURIComponent的区别

一.escape和它们不是同一类 简单来说,escape是对字符串(string)进行编码(而另外两种是对URL),作用是让它们在所有电脑上可读.编码之后的效果是%XX或者%uXXXX这种形式.其中 ASCII字母.数字.@*/+ ,这几个字符不会被编码,其余的都会.最关键的是,当你需要对URL编码时,请忘记这个方法,这个方法是针对字符串使用的,不适用于URL.事实上,这个方法我还没有在实际工作中用到过,所以就不多讲了. 二.最常用的encodeURI和encodeURIComponent 对U

encodeURI和encodeURIComponent的区别

这两个函数功能上面比较接近,但是有一些区别. encodeURI:不会进行编码的字符有82个 :!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z encodeURIComponent:不会进行编码的字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z 从上面的说明中我们可以看出来encodeURIComponent编码更很一些,被编码后的字符都变成%xx这样的16进制形式. 从使用的角度来说: encodeURI主要用于

javascript - encodeURI和encodeURIComponent的区别

这两个函数功能上面比较接近,但是有一些区别. encodeURI:不会进行编码的字符有82个 :!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z encodeURIComponent:不会进行编码的字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z 从上面的说明中我们可以看出来encodeURIComponent编码更很一些,被编码后的字符都变成%xx这样的16进制形式. 从使用的角度来说: encodeURI主要用于

细讲encodeURI和encodeURIComponent以及escape的区别与应用

首先,我们都知道这三个东西都是用来编码的 先来说encodeURI()和encodeURIComponent() 这两个是在转换url时候用来编码解码用的. 有编码就会有解码, 解码就是decodeURI()和decodeURIComponent() 他们的用法很简单,在参数中带入要转码的文字就可实现目的 如: encodeURI("我是要编码的文字") decodeURI("我是要解码的文字") encodeURIComponent("我是要编码的文字&

URL编码与解码&escape, encodeURI和encodeURIComponent区别

通常如果一样东西需要编码,说明这样东西并不适合传输.原因多种多样,如Size过大,包含隐私数据,对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义. 例如,Url参数字符串中使用key=value键值对这样的形式来传参,键值对之间以&符号分隔,如/s?q=abc&ie=utf-8.如果你的value字符串中包含了=或者&,那么势必会造成接收Url的服务器解析错误,因此必须将引起歧义的&和=符号进行转义,也就是对其进行编码. 又如,Url的编码格式采用的是AS

javascript中escape()、unescape()、encodeURI()、encodeURIComponent()、decodeURI()、decodeURIComponent()比较

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

一张图看懂encodeURI、encodeURIComponent、decodeURI、decodeURIComponent的区别

一.这四个方法的用处 1.用来编码和解码URI的 统一资源标识符,或叫做 URI,是用来标识互联网上的资源(例如,网页或文件)和怎样访问这些资源的传输协议(例如,HTTP 或 FTP)的字符串.除了encodeURI.encodeURIComponent.decodeURI.decodeURIComponent四个用来编码和解码 URI 的函数之外 ECMAScript 语言自身不提供任何使用 URL 的支持. 2.URI组成形式 一个 URI 是由组件分隔符分割的组件序列组成.其一般形式是: