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 相关文章推荐
分享一个asp.net pager分页控件
Jan 04 Javascript
JavaScript中常用的运算符小结
Jan 18 Javascript
javascript学习笔记(十四) window对象使用介绍
Jun 20 Javascript
一行代码实现纯数据json对象的深度克隆实现思路
Jan 09 Javascript
通过url查找a元素应用案例
Apr 29 Javascript
微信小程序实现手势图案锁屏功能
Jan 30 Javascript
js实现鼠标拖拽缩放div实例代码
Mar 25 Javascript
详解vue-cli+element-ui树形表格(多级表格折腾小计)
Apr 17 Javascript
通过GASP让vue实现动态效果实例代码详解
Nov 24 Javascript
ES6常用小技巧总结【去重、交换、合并、反转、迭代、计算等】
Dec 21 Javascript
vue从零实现一个消息通知组件的方法详解
Mar 16 Javascript
vue使用map代替Aarry数组循环遍历的方法
Apr 30 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获取服务器端信息的方法
2014/11/28 PHP
PHP使用Redis实现Session共享的实现示例
2019/05/12 PHP
javascript中的new使用
2010/03/20 Javascript
Struts2的s:radio标签使用及用jquery添加change事件
2013/04/08 Javascript
Bootstrap基础学习
2015/06/16 Javascript
深入探秘jquery瀑布流的实现
2016/01/30 Javascript
学JavaScript七大注意事项【必看】
2016/05/04 Javascript
微信小程序 实战小程序实例
2016/10/08 Javascript
谈谈JS中常遇到的浏览器兼容问题和解决方法
2016/12/17 Javascript
React Native中导航组件react-navigation跨tab路由处理详解
2017/10/31 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
2020/04/12 Javascript
JS中Promise函数then的奥秘探究
2018/07/30 Javascript
详解如何为你的angular app构建一个第三方库
2018/12/07 Javascript
用node开发并发布一个cli工具的方法步骤
2019/01/03 Javascript
Angular2实现的秒表及改良版示例
2019/05/10 Javascript
微信小程序 select 下拉框组件功能
2019/09/09 Javascript
js blob类型url的视频下载问题的解决
2019/11/29 Javascript
Nuxt v-bind绑定img src不显示的解决
2019/12/05 Javascript
JavaScript Reflect Metadata实现详解
2019/12/12 Javascript
react国际化化插件react-i18n-auto使用详解
2020/03/31 Javascript
[50:02]完美世界DOTA2联赛PWL S2 Magma vs FTD 第三场 11.29
2020/12/03 DOTA
python中列表和元组的区别
2017/12/18 Python
python 绘制拟合曲线并加指定点标识的实现
2019/07/10 Python
django 微信网页授权认证api的步骤详解
2019/07/30 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
2019/09/16 Python
Python函数式编程指南:对生成器全面讲解
2019/11/19 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
python3代码输出嵌套式对象实例详解
2020/12/03 Python
HTTP状态码详解
2021/03/18 杂记
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
MVMT手表官方网站:时尚又实惠的高品质手表
2016/12/04 全球购物
Expedia西班牙:预订酒店、机票、旅行和廉价度假套餐
2019/04/10 全球购物
甜美蛋糕店创业计划书
2014/01/30 职场文书
授权委托书范本
2014/04/03 职场文书
好学生评语大全
2014/05/05 职场文书
大学生党员自我批评思想汇报
2014/10/10 职场文书