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 源码分析笔记(2) 变量列表
May 28 Javascript
用js实现输入提示(自动完成)的实例代码
Jun 14 Javascript
JavaScript数据类型检测代码分享
Jan 26 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
Apr 06 Javascript
javascript中的 object 和 function小结
Aug 14 Javascript
js从输入框读取内容,比较两个数字的大小方法
Mar 13 Javascript
JavaScript中的ES6 Proxy的具体使用
Jun 16 Javascript
p5.js实现故宫橘猫赏秋图动画
Oct 23 Javascript
如何在wxml中直接写js代码(wxs)
Nov 14 Javascript
Jquery让form表单异步提交代码实现
Nov 14 jQuery
jQuery实现小火箭返回顶部特效
Feb 03 jQuery
JS如何把字符串转换成json
Feb 21 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维护文件系统
2006/10/09 PHP
php设计模式  Command(命令模式)
2011/06/17 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
2014/07/22 PHP
php通过正则表达式记取数据来读取xml的方法
2015/03/09 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
2018/04/08 PHP
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
jQuery+ajax读取并解析XML文件的方法
2016/09/09 Javascript
浅谈jquery中ajax跨域提交的时候会有2次请求的问题
2017/11/10 jQuery
JS基于对象的特性实现去除数组中重复项功能详解
2017/11/17 Javascript
Angular5.1新功能分享
2017/12/21 Javascript
vuejs实现递归树型菜单组件
2018/01/13 Javascript
基于jQuery实现无缝轮播与左右点击效果
2018/05/13 jQuery
浅谈Vue组件及组件的注册方法
2018/08/24 Javascript
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
2019/08/01 Javascript
three.js 将图片马赛克化的示例代码
2020/07/31 Javascript
[03:05]《我与DAC》之xiao8:DAC与BG
2018/03/27 DOTA
Python读写Redis数据库操作示例
2014/03/18 Python
Python实现处理管道的方法
2015/06/04 Python
python3之微信文章爬虫实例讲解
2017/07/12 Python
Django之使用celery和NGINX生成静态页面实现性能优化
2019/10/08 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
2019/10/28 Python
Python 如何查找特定类型文件
2020/08/17 Python
python在协程中增加任务实例操作
2021/02/28 Python
CSS3选择器新增问题的实现
2021/01/21 HTML / CSS
Perfume’s Club意大利官网:欧洲美妆电商
2019/05/03 全球购物
Linux如何命名文件--使用文件名时应注意
2014/05/29 面试题
演讲稿怎么写才完美
2014/01/02 职场文书
社区志愿者心得体会
2014/01/03 职场文书
《手指教学》反思
2014/02/14 职场文书
公司爱心捐款倡议书
2014/05/14 职场文书
设备售后服务承诺书
2014/05/30 职场文书
合同意向书范本
2014/07/30 职场文书
教师求职简历自我评价
2015/03/10 职场文书
党员廉政准则心得体会
2016/01/20 职场文书
成人成长感言如何写?
2019/08/16 职场文书
Kubernetes控制节点的部署
2022/04/01 Servers