JavaScript、C# URL编码、解码总结


Posted in Javascript onJanuary 21, 2017

JavaScript部分

encodeURI() (解码为:decodeURI()):不会转义的字符:- _ . ! ~ * ‘ ( ) ;/?:@&=+$,#

例如:
encodeURI(“https://3water.com?a=-_.!~*'();/?:@&=+$,#”)
输出:
“https://3water.com?a=-_.!~*'();/?:@&=+$,#”

encodeURIComponent() (解码为:decodeURIComponent() ):不会转义的字符: ? _ . ! ~ * ‘ ( )

例如:

encodeURIComponent(“https://3water.com?a=-_.!~*'();/?:@&=+$,#”)

输出:

“http%3A%2F%2F3water.com%3Fa%3D-_.!~*'()%3B%2F%3F%3A%40%26%3D%2B%24%2C%23”

区别:对于;/?:@&=+$,#这些字符的处理。

还有个附加的: escape() ,不过 ECMAScript v3 反对使用该方法。原因猜测是根据转义序列有关,escape()的转移序列为:
对于代码单元小于等于0xFF的被替换字符,使用 %xx 格式的两位数转义序列。对于代码单元大于0xFF的被替换字符,使用 %uxxxx 格式的四位数转义序列。
具体的可以研究一下ECMAScript的规范,由于本人道行太浅,就不深入研究了,哈。。 unescape() 同样不推荐使用。

C#部分:

C#部分比较混乱,不仅有很多urlencode,还有好多htmlencode。但其实在处理url时我们只关注url部分就好了,html那部分当我们处理html时才会用到,如预防xss攻击时应该就需要那些htmlencode,htmldecode了。

下面说一下url的常用方法:

Server.UrlEncode(解码:Server.UrlDecode):
Server.UrlEncode使用系?预设编码做为参数调用HttpUtility.UrlEncode编码,所以如果系统全局都用UTF8格式编码,这两个方法就是一样的(至于是否使用了系统预设编码这个还有待考证,没有找到官方说法)。
HttpUtility.UrlEncode(解码:HttpUtility. UrlDecode)

例如:

HttpUtility.UrlEncode(“https://3water.com?a=-_.!~*'();/?:@&=+$,#”)

输出:

http%3a%2f%2f3water.com%3fa%3d-_.!%7e*%27()%3b%2f%3f%3a%40%26%3d%2b%24%2c%23

可见:此方法会对url地址进行编码。但是有一点要知道,就是此方法会把空格编码为+号而不是十六进制的%20,所以此方法编码参数中如果存在空格会造成错误。

Uri.EscapeUriString(解码:没找到对应的):会对中文、空格等进行转义。

例如:

Uri.EscapeUriString(“https://3water.com?a=中国&123 -_.!~*'();/?:@&=+$,#”)

输出:

https://3water.com?a=%E4%B8%AD%E5%9B%BD&123%20%20%20-_.!~*'();/?:@&=+$,#

可见其不会对网址进行编码。

Uri.EscapeDataString(解码: Uri.UnescapeDataString):不仅对参数,还会对网址进行编码。

例如:

Uri.EscapeDataString(“https://3water.com?a=中国&123 -_.!~*'();/?:@&=+$,#”)

输出:http%3A%2F%2F3water.com%3Fa%3D%E4%B8%AD%E5%9B%BD%26123%20%20%20-_.%21~%2A%2
7%28%29%3B%2F%3F%3A%40%26%3D%2B%24%2C%23

所以,总结:

不需要编码://可用:JavaScript中用encodeURI,否则用encodeURIComponent,C#中用Uri.EscapeUriString否则用Uri.EscapeDataString

Javascript 相关文章推荐
jQuery实现公告文字左右滚动的实例代码
Oct 29 Javascript
javascript检测是否联网的实现代码
Sep 28 Javascript
jQuery对指定元素中指定字符串进行替换的方法
Mar 17 Javascript
js实现表单Radio切换效果的方法
Aug 17 Javascript
Javascript中return的使用与闭包详解
Jan 11 Javascript
整理关于Bootstrap列表组的慕课笔记
Mar 29 Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
Jun 01 Javascript
JS简单实现父子窗口传值功能示例【未使用iframe框架】
Sep 20 Javascript
JavaScript使用Math.random()生成简单的验证码
Jan 21 Javascript
jQuery实现的图片点击放大缩小功能案例
Jan 02 jQuery
jQuery HTML设置内容和属性操作实例分析
May 20 jQuery
vue使用swiper实现左右滑动切换图片
Oct 16 Javascript
Vue结合原生js实现自定义组件自动生成示例
Jan 21 #Javascript
jQuery基于正则表达式的表单验证功能示例
Jan 21 #Javascript
一篇文章搞定JavaScript类型转换(面试常见)
Jan 21 #Javascript
超全面的JavaScript开发规范(推荐)
Jan 21 #Javascript
Mongoose学习全面理解(推荐)
Jan 21 #Javascript
ng-options和ng-checked在表单中的高级运用(推荐)
Jan 21 #Javascript
vue实现添加标签demo示例代码
Jan 21 #Javascript
You might like
在Yii框架中使用PHP模板引擎Twig的例子
2014/06/13 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
php微信开发之关注事件
2018/06/14 PHP
在线游戏大家来找茬II
2006/09/30 Javascript
背景音乐每次刷新都可以自动更换
2007/02/01 Javascript
一些Javascript的IE和Firefox(火狐)兼容性的问题总结及常用例子
2009/05/21 Javascript
jquery中选择块并改变属性值的方法
2013/07/31 Javascript
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
jQuery中:hidden选择器用法实例
2014/12/30 Javascript
Javascript中typeof 用法小结
2015/05/12 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
jQuery 常用代码集锦(必看篇)
2016/05/16 Javascript
AngularJS实现表单验证功能
2017/01/09 Javascript
jquery dataTable 后台加载数据并分页实例代码
2017/06/07 jQuery
Angular2关于@angular/cli默认端口号配置的问题
2017/07/15 Javascript
vue-resource请求实现http登录拦截或者路由拦截的方法
2018/07/11 Javascript
JS双向链表实现与使用方法示例(增加一个previous属性实现)
2019/01/31 Javascript
Vue父组件向子组件传值以及data和props的区别详解
2020/03/02 Javascript
uniapp实现可以左右滑动导航栏
2020/10/21 Javascript
解决vue数据不实时更新的问题(数据更改了,但数据不实时更新)
2020/10/27 Javascript
Python入门篇之条件、循环
2014/10/17 Python
github配置使用指南
2014/11/18 Python
Windows和Linux下使用Python访问SqlServer的方法介绍
2015/03/10 Python
Python中atexit模块的基本使用示例
2015/07/08 Python
python 巧用正则寻找字符串中的特定字符的位置方法
2018/05/02 Python
Python中面向对象你应该知道的一下知识
2019/07/10 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
2019/12/10 Python
Python实现代码块儿折叠
2020/04/15 Python
使用matplotlib动态刷新指定曲线实例
2020/04/23 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
Schecker荷兰:狗狗用品和配件
2019/06/06 全球购物
医护人员英文求职信范文
2013/11/26 职场文书
校班主任推荐信范文
2013/12/03 职场文书
爱护公物演讲稿
2014/09/09 职场文书
导游词之上海豫园
2019/10/24 职场文书