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实现点小图看大图效果的思路及示例代码
Oct 28 Javascript
JavaScript中统计Textarea字数并提示还能输入的字符
Jun 10 Javascript
JavaScript中捕获与冒泡详解及实例
Feb 03 Javascript
Node.js使用NodeMailer发送邮件实例代码
Mar 06 Javascript
Vue.js通用应用框架-Nuxt.js的上手教程
Dec 25 Javascript
JavaScript实现创建自定义对象的常用方式总结
Jul 09 Javascript
jQuery实现根据身份证号获取生日、年龄、性别等信息的方法
Jan 09 jQuery
JS设置自定义快捷键并实现图片上下左右移动
Oct 17 Javascript
js实现select下拉框选择
Jan 11 Javascript
关于vue3默认把所有onSomething当作v-on事件绑定的思考
May 15 Javascript
八种Vue组件间通讯方式合集(推荐)
Aug 18 Javascript
如何用JavaScipt测网速
May 09 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
把77A收信机改造成收音机
2021/03/02 无线电
php将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
PHP zip扩展Linux下安装过程分享
2014/05/05 PHP
PHP排序算法类实例
2015/06/17 PHP
PHP内存使用情况如何获取
2015/10/10 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
一些技巧性实用js代码小结
2009/10/14 Javascript
IE bug table元素的innerHTML
2010/01/11 Javascript
jquery.post用法示例代码
2014/01/03 Javascript
JS生成随机字符串的多种方法
2014/06/10 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
2016/12/05 Javascript
vue实现样式之间的切换及vue动态样式的实现方法
2017/12/19 Javascript
使用vux实现上拉刷新功能遇到的坑
2018/02/08 Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
2019/01/30 Javascript
WebGL学习教程之Three.js学习笔记(第一篇)
2019/04/25 Javascript
js验证身份证号码记录的方法
2019/04/26 Javascript
详解微信小程序开发(项目从零开始)
2019/06/06 Javascript
实例讲解React 组件
2020/07/07 Javascript
[55:47]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第三局
2016/02/27 DOTA
[41:08]TNC vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[42:50]NB vs VP 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python格式化字符串实例总结
2014/09/28 Python
python打开文件并获取文件相关属性的方法
2015/04/23 Python
Python实现简单截取中文字符串的方法
2015/06/15 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
python 初始化一个定长的数组实例
2019/12/02 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
2020/05/25 Python
通过案例解析python鸭子类型相关原理
2020/10/10 Python
Nice Kicks网上商店:ShopNiceKicks.com
2018/12/25 全球购物
国贸专业的职业规划范文
2014/01/23 职场文书
元旦文艺汇演主持词
2014/03/26 职场文书
趣味运动会赞词
2015/07/22 职场文书
Python selenium模拟网页点击爬虫交管12123违章数据
2021/05/26 Python
总结一些Java常用的加密算法
2021/06/11 Java/Android
JavaScript设计模式之原型模式详情
2022/06/21 Javascript
码云(gitee)通过git自动同步到阿里云服务器
2022/12/24 Servers