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 相关文章推荐
IE JS编程需注意的内存释放问题
Jun 23 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
Jan 11 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
Jan 08 Javascript
jquery编写Tab选项卡滚动导航切换特效
Jul 17 Javascript
相册展示PhotoSwipe.js插件实现
Aug 25 Javascript
Angularjs中的ui-bootstrap的使用教程
Feb 19 Javascript
JavaScript实现简单的树形菜单效果
Jun 23 Javascript
jQuery事件对象的属性和方法详解
Sep 09 jQuery
vue.js获得当前元素的文字信息方法
Mar 09 Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
Sep 30 Javascript
三步实现ionic3点击退出app程序
Sep 17 Javascript
vue+elementUI(el-upload)图片压缩,默认同比例压缩操作
Aug 10 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程序的php代码
2008/04/07 PHP
PHP可逆加密/解密函数分享
2012/09/25 PHP
typecho插件编写教程(五):核心代码
2015/05/28 PHP
php简单创建zip压缩文件的方法
2016/04/30 PHP
Javascript实例教程(19) 使用HoTMetal(4)
2006/12/23 Javascript
收集的一些Array及String原型对象的扩展实现代码
2010/12/05 Javascript
JavaScript中使用Substring删除字符串最后一个字符
2013/11/03 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
js实现图片点击左右轮播
2015/07/08 Javascript
jQuery取得iframe中元素的常用方法详解
2016/01/14 Javascript
jQuery 实现评论等级好评差评特效
2016/05/06 Javascript
js中DOM三级列表(代码分享)
2017/03/20 Javascript
Node.js设置CORS跨域请求中多域名白名单的方法
2017/03/28 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
2017/05/05 Javascript
Angular6 正则表达式允许输入部分中文字符
2018/09/10 Javascript
Seajs源码详解分析
2019/04/02 Javascript
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
2019/12/17 Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
2020/04/22 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
学习python (1)
2006/10/31 Python
Python数据类型之Number数字操作实例详解
2019/05/08 Python
Python多线程模块Threading用法示例小结
2019/11/09 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
2019/12/25 Python
浅析python标准库中的glob
2020/03/13 Python
python实现猜数游戏
2020/03/27 Python
pycharm的python_stubs问题
2020/04/08 Python
浅谈django 重载str 方法
2020/05/19 Python
python 如何上传包到pypi
2020/12/24 Python
世界上第一个创建了罩杯系统的美国内衣品牌:Maidenform
2019/03/23 全球购物
俄罗斯运动、健康和美容产品在线商店:Lactomin.ru
2020/07/23 全球购物
优秀员工自荐信范文
2013/10/05 职场文书
校园公益广告语
2014/03/13 职场文书
SpringBoot快速入门详解
2021/07/21 Java/Android
Java8利用Stream对列表进行去除重复的方法详解
2022/04/14 Java/Android
Win11跳过联网界面创建本地管理账户的3种方法
2022/04/20 数码科技