JS编码三方法区别:escape、encodeURI和encodeURIComponent

1、escape和它们不是同一类

  简单来说,escape是对字符串(string)进行编码(而另外两种是对URL),作用是让它们在所有电脑上可读。编码之后的效果是%XX或者%uXXXX这种形式。其中 ASCII字母、数字、@*/+ ,这几个字符不会被编码,其余的都会。

  最关键的是,当你需要对URL编码时,请忘记这个方法,这个方法是针对字符串使用的,不适用于URL。事实上,这个方法我还没有在实际工作中用到过,所以就不多讲了。

2、最常用的encodeURI和encodeURIComponent

  对URL编码是常见的事,所以这两个方法应该是实际中要特别注意的。它们都是编码URL,唯一区别就是编码的字符范围,其中:

  (1)encodeURI方法不会对下列字符编码  ASCII字母、数字、[email protected]#$&*()=:/,;?+‘

  (2)encodeURIComponent方法不会对下列字符编码 ASCII字母、数字、~!*()‘

  所以encodeURIComponent比encodeURI编码的范围更大。

  实际例子来说,encodeURIComponent会把 http://  编码成  http%3A%2F%2F 而encodeURI却不会。

3、最重要的,我该什么场合用什么方法

  区别上面说的很清楚了,接下来从实际例子来说说把。

  (1)如果只是编码字符串,不和URL有半毛钱关系,那么用escape。

  (2)如果你需要编码整个URL,然后需要使用这个URL,那么用encodeURI。

  比如:

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是最好方法。

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肯定要出问题,因为后面的/是需要编码的。

时间: 2024-08-30 03:50:09

JS编码三方法区别:escape、encodeURI和encodeURIComponent的相关文章

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

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

Javascript中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

js跳出循环的方法区别( break, continue, return ) 及 $.each 的(return true 和 return false)

js编程语法之break语句: break语句会使运行的程序立刻退出包含在最内层的循环或者退出一个switch语句. 由于它是用来退出循环或者switch语句,所以只有当它出现在这些语句时,这种形式的break语句才是合法的. 如果一个循环的终止条件非常复杂,那么使用break语句来实现某些条件比用一个循环表达式来表达所有的条件容易得多. for(var i=1;i<=10;i++) { if(i==8) { break; } document.write(i); } 当i=8的时候,直接退出f

url的三个js编码函数escape(),encodeURI(),encodeURIComponent()简介

url的三个js编码函数escape(),encodeURI(),encodeURIComponent()简介 2014年10月12日 16806次浏览 引子 浏览器URl地址,上网一定会用到,但是浏览器地址有中文或者浏览器url参数操作的时候,经常会用到encodeURIComponent()和decodeURIComponent()以及encodeURI()等等.关于浏览器参数操作,请看文章http://www.haorooms.com/post/js_url_canshu ,今天主要讲讲e

url的三个js编码函数escape(),encodeURI(),encodeURIComponent()简介【转】

引子 浏览器URl地址,上网一定会用到,但是浏览器地址有中文或者浏览器url参数操作的时候,经常会用到encodeURIComponent()和decodeURIComponent()以及encodeURI()等等.关于浏览器参数操作,请看文章http://www.haorooms.com/post/js_url_canshu ,今天主要讲讲escape(),encodeURI(),encodeURIComponent()这几个函数的用法和区别. 为啥会有浏览器编码这一说法 一般来说,URL只能

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

Java后台URL转码-Js编码和Java后台解码

方法一 String message = java.net.URLEncoder.encode("[西北局信息中心]采油气接口异常", "utf-8"); 前台传的如果是汉字的话,后台就用URLDecoder解码 1.java.将resultMsg 转为utf-8 (1) resultMsg = URLEncoder.encode(resultMsg, "utf-8"); (2) new String(request.getParameter(&

JS编码解码详解

今天在整理 js编码解码方法时,在网上搜资料,发现一篇文章讲的不错,讲解的非常简单明了,于是乎就想转载过来,却发现无法转载到博客园,最后只能卑鄙的摘抄过来.js编码解码就是将一些对URL和数据库敏感的在使用时容易被过滤掉,或者容易对数据库造成注入威胁的字符串进行编码,在使用时再进行解码,原理很简单用法也很简单,正好下面这篇文章讲解的非常明了利索.原文地址是http://blog.csdn.net/wwwchenbing/article/details/3409183,希望作者不要告我侵权. 1.

JS 字符串编码函数(解决URL特殊字符传递问题):escape()、encodeURI()、encodeURIComponent()区别详解

转:http://www.cnblogs.com/qiantuwuliang/archive/2009/07/19/1526687.html //该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) . //其他字符(比如 :;/?:@&=+$,# var tDT_Start =$("#DT_Start").val().replace(/:/g,'|'); //将:替代为|,传到后台再转换回来var tD