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 相关文章推荐
Js 本页面传值实现代码
May 17 Javascript
jQuery点击弹出下拉菜单的小例子
Aug 01 Javascript
JS网页在线获取鼠标坐标值的方法
Feb 28 Javascript
bootstrap输入框组代码分享
Jun 07 Javascript
通过jquery实现页面的动画效果(实例代码)
Sep 18 Javascript
Bootstrap作品展示站点实战项目2
Oct 14 Javascript
jQuery实现Select下拉列表进行状态选择功能
Mar 30 jQuery
vue loadmore组件上拉加载更多功能示例代码
Jul 19 Javascript
基于jQuery实现Ajax验证用户名是否可用实例
Mar 25 jQuery
微信小程序实现上传图片裁剪图片过程解析
Aug 22 Javascript
JS+CSS实现3D切割轮播图
Mar 21 Javascript
javascript实现贪吃蛇小练习
Jul 05 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
PHP下通过系统信号量加锁方式获取递增序列ID
2009/09/25 PHP
php 高性能书写
2010/12/11 PHP
PHP中删除变量时unset()和null的区别分析
2011/01/27 PHP
关于使用coreseek并为其做分页的介绍
2013/06/21 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
2015/07/01 PHP
把JS与CSS写在同一个文件里的书写方法
2007/06/02 Javascript
javascript事件问题
2009/09/05 Javascript
js当一个变量为函数时 应该注意的一点细节小结
2011/12/29 Javascript
ie7+背景透明文字不透明超级简单的实现方法
2014/01/17 Javascript
学习JavaScript设计模式之策略模式
2016/01/12 Javascript
基于jquery实现表格内容筛选功能实例解析
2016/05/09 Javascript
JS实现页面数据无限加载
2016/09/13 Javascript
值得分享和收藏的xmlplus组件学习教程
2017/05/05 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
使用Vue自定义指令实现Select组件
2018/05/24 Javascript
vue中的v-if和v-show的区别详解
2019/09/01 Javascript
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
python实现代码行数统计示例分享
2014/02/10 Python
Python中还原JavaScript的escape函数编码后字符串的方法
2014/08/22 Python
Python环境下安装使用异步任务队列包Celery的基础教程
2016/05/07 Python
python利用正则表达式提取字符串
2016/12/08 Python
Python通过Django实现用户注册和邮箱验证功能代码
2017/12/11 Python
python 执行shell命令并将结果保存的实例
2018/05/11 Python
20行python代码实现人脸识别
2019/05/05 Python
Python数据结构与算法(几种排序)小结
2019/06/22 Python
python日志模块logbook使用方法
2019/09/19 Python
Python LMDB库的使用示例
2021/02/14 Python
html5移动端自适应布局的实现
2020/04/15 HTML / CSS
您的网上新华书店:文轩网
2016/08/24 全球购物
毕业生简单求职信
2013/11/19 职场文书
幼儿园优秀教师事迹
2014/02/13 职场文书
政治思想表现评语
2014/05/04 职场文书
领导班子四风对照检查材料范文
2014/09/27 职场文书
2014年班长个人工作总结
2014/11/14 职场文书
2014年班组长工作总结
2014/11/20 职场文书
反腐倡廉观后感
2015/06/08 职场文书