一张图看懂encodeURI、encodeURIComponent、decodeURI、decodeURIComponent的区别
2016-03-15 14:11
344 查看
一、这四个方法的用处
1、用来编码和解码URI的
统一资源标识符,或叫做 URI,是用来标识互联网上的资源(例如,网页或文件)和怎样访问这些资源的传输协议(例如,HTTP 或 FTP)的字符串。除了encodeURI、encodeURIComponent、decodeURI、decodeURIComponent四个用来编码和解码 URI 的函数之外 ECMAScript 语言自身不提供任何使用 URL 的支持。
2、URI组成形式
一个 URI 是由组件分隔符分割的组件序列组成。其一般形式是:
Scheme : First / Second ; Third ? Fourth
其中斜体的名字代表组件;“:”, “/”, “;”,“?”是当作分隔符的保留字符。
3、有和不同?
encodeURI 和 decodeURI 函数操作的是完整的
URI;这俩函数假定 URI 中的任何保留字符都有特殊意义,所有不会编码它们。
encodeURIComponent 和 decodeURIComponent 函数操作的是组成
URI 的个别组件;这俩函数假定任何保留字符都代表普通文本,所以必须编码它们,所以它们(保留字符)出现在一个完整 URI 的组件里面时不会被解释成保留字符了。
以上说明摘自ECMAScript标准,为了容易读懂做了点编辑加工。
4、图解四个函数的不同:
ECMA对这四个函数还做了详细解释,可能是为了写的更逻辑化一些,采用了类似变量配合逻辑的写法来说明,但是让初学者看得云里雾里的特别绕,所以有必要把它写得更像是人读的东西……
![](http://images2015.cnblogs.com/blog/787416/201603/787416-20160315112709146-1525146904.png)
当 URI 里包含一个没在上面列出的字符或有时不想让给定的保留字符有特殊意义,那么必须编码这个字符。字符被转换成 UTF-8 编码,首先从 UTF-16 转换成相应的代码点值的替代。然后返回的字节序列转换为一个字符串,每个字节用一个“%xx”形式的转移序列表示。(具体转换规则可以参考抽象操作Encode和Decode的说明)
国内外各搜索引擎,均用JavaScript的encodeURIComponent()函数对搜索关键字进行编码,终于找到了.net下的实现方法。
.net采用
System.Text;
Encoding 能过查看 http://msdn.microsoft.com/zh-cn/library/system.text.encoding.aspx
国内各搜索引擎均采用GB2312,使用此类搜索引擎时,编码为:
HttpUtility.UrlEncode(String, System.Text.Encoding.GetEncoding(936))
现在这问题解决了,可以不再只限于采用UTF-8编码的Google做搜索工具
1、用来编码和解码URI的
统一资源标识符,或叫做 URI,是用来标识互联网上的资源(例如,网页或文件)和怎样访问这些资源的传输协议(例如,HTTP 或 FTP)的字符串。除了encodeURI、encodeURIComponent、decodeURI、decodeURIComponent四个用来编码和解码 URI 的函数之外 ECMAScript 语言自身不提供任何使用 URL 的支持。
2、URI组成形式
一个 URI 是由组件分隔符分割的组件序列组成。其一般形式是:
Scheme : First / Second ; Third ? Fourth
其中斜体的名字代表组件;“:”, “/”, “;”,“?”是当作分隔符的保留字符。
3、有和不同?
encodeURI 和 decodeURI 函数操作的是完整的
URI;这俩函数假定 URI 中的任何保留字符都有特殊意义,所有不会编码它们。
encodeURIComponent 和 decodeURIComponent 函数操作的是组成
URI 的个别组件;这俩函数假定任何保留字符都代表普通文本,所以必须编码它们,所以它们(保留字符)出现在一个完整 URI 的组件里面时不会被解释成保留字符了。
以上说明摘自ECMAScript标准,为了容易读懂做了点编辑加工。
4、图解四个函数的不同:
ECMA对这四个函数还做了详细解释,可能是为了写的更逻辑化一些,采用了类似变量配合逻辑的写法来说明,但是让初学者看得云里雾里的特别绕,所以有必要把它写得更像是人读的东西……
![](http://images2015.cnblogs.com/blog/787416/201603/787416-20160315112709146-1525146904.png)
当 URI 里包含一个没在上面列出的字符或有时不想让给定的保留字符有特殊意义,那么必须编码这个字符。字符被转换成 UTF-8 编码,首先从 UTF-16 转换成相应的代码点值的替代。然后返回的字节序列转换为一个字符串,每个字节用一个“%xx”形式的转移序列表示。(具体转换规则可以参考抽象操作Encode和Decode的说明)
国内外各搜索引擎,均用JavaScript的encodeURIComponent()函数对搜索关键字进行编码,终于找到了.net下的实现方法。
.net采用
System.Text;
UrlDecode(String, Encoding) | 使用指定的编码对象将 URL 编码的字符串转换为已解码的字符串。 |
代码页 | Name | 显示名称 |
936 | gb2312 | 简体中文 (GB2312) |
65001 | utf-8 | Unicode (UTF-8) |
HttpUtility.UrlEncode(String, System.Text.Encoding.GetEncoding(936))
现在这问题解决了,可以不再只限于采用UTF-8编码的Google做搜索工具
相关文章推荐
- Java四种线程池的使用
- Java Map クラスの違い HashMap Hashtable TreeMap LinkedHashMap
- SQL数据库语言基础
- iOS7 之后 tableView被navigationBar遮挡 问题详解
- 使用Fresco的时候怎么也不显示图片
- ajax与tp框架传值
- android ImageView实现圆角(xml实现方法)
- What's new in JDK 8
- Linux查看平均负载[cat /proc/loadavg]
- 地图初步
- 循环矩阵傅里叶对角化
- ORACLE分页查询SQL语法——最高效的分页
- Objective-C 引用计数原理
- hive使用遇到的问题
- 求一个unsigned数是否是2的某次幂,如果是求出是2的多少次幂(要求不能用循环)
- iOS:编译错误Undefined symbols for architecture i386: _OBJC_CLASS_$_XXX", referenced from: error
- jQuery(三)
- TMD 投了2天简历
- iOS网络请求GET&POST,同步&异步
- 怎么实现ZBrush与数位板雕刻模型的结合运用