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 要点归纳(三) jQuery中的事件和动画(上:事件篇)
Mar 24 Javascript
JavaScript 判断日期格式是否正确的实现代码
Jul 04 Javascript
基于jquery实现漂亮的动态信息提示效果
Aug 02 Javascript
jQuery.getScript加载同域JS的代码
Feb 13 Javascript
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
Jul 09 Javascript
JS cookie中文乱码解决方法
Jan 28 Javascript
js实现索引图片切换效果
Nov 21 Javascript
JS 拼凑字符串的简单实例
Sep 02 Javascript
JS实现的找零张数最小问题示例
Nov 28 Javascript
详解angularjs 学习之 scope作用域
Jan 15 Javascript
Vue Promise的axios请求封装详解
Aug 13 Javascript
vue+element table表格实现动态列筛选的示例代码
Jan 14 Vue.js
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函数学习之PHP函数点评
2012/07/05 PHP
纯CSS打造的导航菜单(附jquery版)
2010/08/07 Javascript
jQeury淡入淡出需要注意的问题
2010/09/08 Javascript
将字符串转换成gb2312或者utf-8编码的参数(js版)
2013/04/10 Javascript
js中同步与异步处理的方法和区别总结
2013/12/25 Javascript
javascript正则表达式使用replace()替换手机号的方法
2015/01/19 Javascript
jQuery+easyui中的combobox实现下拉框特效
2015/02/27 Javascript
jQuery结合CSS制作动态的下拉菜单
2015/10/27 Javascript
利用JQuery实现datatables插件的增加和删除行功能
2017/01/06 Javascript
js实现随机数字字母验证码
2017/06/19 Javascript
vue2.0 如何把子组件的数据传给父组件(推荐)
2018/01/15 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
2018/07/12 Javascript
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
2018/10/12 Javascript
Vue实现移动端左右滑动效果的方法
2018/11/27 Javascript
详释JavaScript执行环境与执行栈
2019/04/02 Javascript
vue解决花括号数据绑定不成功的问题
2019/10/30 Javascript
js前端对于大量数据的展示方式及处理方法
2020/12/02 Javascript
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
python每次处理固定个数的字符的方法总结
2013/01/29 Python
完美解决Python2操作中文名文件乱码的问题
2017/01/04 Python
Python Socket使用实例
2017/12/18 Python
python设置值及NaN值处理方法
2018/07/03 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
2019/10/17 Python
python实现坦克大战
2020/04/24 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
华为旗下电子商务平台:华为商城
2016/08/06 全球购物
Lululemon加拿大官网:加拿大知名体育服装零售商
2019/04/12 全球购物
Lungolivigno Fashion官网:高级时装在线购物
2020/10/17 全球购物
学生个人自我鉴定
2014/03/26 职场文书
无偿献血倡议书
2014/04/14 职场文书
气象学专业个人求职信
2014/04/22 职场文书
应届毕业生求职信范文
2014/05/08 职场文书
财务会计实训报告
2014/11/05 职场文书
2014年稽查工作总结
2014/12/20 职场文书
教师工作表现评语
2014/12/31 职场文书
springboot+zookeeper实现分布式锁
2022/03/21 Java/Android