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 相关文章推荐
JavaScript回调(callback)函数概念自我理解及示例
Jul 04 Javascript
包含中国城市的javascript对象实例
Aug 03 Javascript
微信小程序(六):列表上拉加载下拉刷新示例
Jan 13 Javascript
图文详解Javascript中的上下文和作用域
Feb 15 Javascript
Vue.js组件tab实现选项卡切换
Mar 23 Javascript
详解vue + vuex + directives实现权限按钮的思路
Oct 24 Javascript
redux中间件之redux-thunk的具体使用
Apr 17 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
Oct 12 Javascript
移动端H5页面返回并刷新页面(BFcache)的方法
Nov 06 Javascript
JS实现商品橱窗特效
Jan 09 Javascript
优化Vue中date format的性能详解
Jan 13 Javascript
详解JavaScript中的数据类型,以及检测数据类型的方法
Sep 17 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
收音机怀古---春雷3P7图片欣赏
2021/03/02 无线电
php zlib压缩和解压缩swf文件的代码
2008/12/30 PHP
PHP基于CURL进行POST数据上传实例
2014/11/10 PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
2017/05/04 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
2019/01/17 PHP
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
jQuery插件-jRating评分插件源码分析及使用方法
2012/12/28 Javascript
JS文本获得焦点清除文本文字的示例代码
2014/01/13 Javascript
javascript刷新父页面的各种方法汇总
2014/09/03 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
javascript表单验证大全
2015/08/12 Javascript
javascript实现九宫格相加数值相等
2020/05/28 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
通用无限极下拉菜单的实现代码
2016/05/31 Javascript
Javascript之Number对象介绍
2016/06/07 Javascript
JavaScript事件详细讲解
2016/06/27 Javascript
javascript中使用未定义变量或值的情况分析
2016/07/19 Javascript
Node.js中用D3.js的方法示例
2017/01/16 Javascript
jQuery插件之validation插件
2017/03/29 jQuery
Node.js安装配置图文教程
2017/05/10 Javascript
vue解决弹出蒙层滑动穿透问题的方法
2018/09/22 Javascript
vue路由对不同界面进行传参及跳转的总结
2019/04/20 Javascript
ant design vue中日期选择框混合时间选择器的用法说明
2020/10/27 Javascript
Python获取文件ssdeep值的方法
2014/10/05 Python
python检测远程服务器tcp端口的方法
2015/03/14 Python
介绍Python中的一些高级编程技巧
2015/04/02 Python
Python基于pygame实现的font游戏字体(附源码)
2015/11/11 Python
python绘制立方体的方法
2018/07/02 Python
python画双y轴图像的示例代码
2019/07/07 Python
pycharm新建Vue项目的方法步骤(图文)
2020/03/04 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
2020/06/11 Python
美国精品家居用品网站:US-Mattress
2016/08/24 全球购物
英国顶级珠宝品牌之家:John Greed
2018/06/09 全球购物
Ibatis的核心配置文件都有什么
2014/09/08 面试题
上海奥佳笔试题面试题
2016/11/16 面试题
观看安全警示教育片心得体会
2016/01/15 职场文书