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 相关文章推荐
Web开发者必备的12款超赞jQuery插件
Dec 03 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
Dec 15 Javascript
使用Jquery获取带特殊符号的ID 标签的方法
Apr 30 Javascript
jQuery中append()方法用法实例
Jan 08 Javascript
jquery实现select选择框内容左右移动代码分享
Nov 21 Javascript
JS采用绝对定位实现回到顶部效果完整实例
Jun 20 Javascript
jQuery实现复制到粘贴板功能
Feb 11 Javascript
JavaScript数据结构之二叉树的计数算法示例
Apr 13 Javascript
全面解析vue中的数据双向绑定
May 10 Javascript
浅谈VUE单页应用首屏加载速度优化方案
Aug 28 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
May 21 Javascript
webpack自动打包和热更新的实现方法
Jun 24 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
检测png图片是否完整的php代码
2010/09/06 PHP
php小型企业库存管理系统的设计与实现代码
2011/05/16 PHP
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
2013/02/14 PHP
关于crontab的使用详解
2013/06/24 PHP
php实现递归的三种基本方式
2020/07/04 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
2016/12/09 PHP
PHP微信模板消息操作示例
2017/06/29 PHP
PHP Swoole异步MySQL客户端实现方法示例
2019/10/24 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
漂亮的提示信息(带箭头)
2007/03/21 Javascript
JavaScript 解析Json字符串的性能比较分析代码
2009/12/16 Javascript
纯js网页画板(Graphics)类简介及实现代码
2012/12/24 Javascript
js操作table示例(个人心得)
2013/11/29 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
详解能在多种前端框架下使用的表格控件
2017/01/11 Javascript
几种响应式文字详解
2017/05/19 Javascript
深入理解Node中的buffer模块
2017/06/03 Javascript
video.js 实现视频只能后退不能快进的思路详解
2018/08/09 Javascript
express+vue+mongodb+session 实现注册登录功能
2018/12/06 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
微信小游戏中three.js离屏画布的示例代码
2020/10/12 Javascript
[01:01:23]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第一场 11.26
2020/11/30 DOTA
python爬虫之xpath的基本使用详解
2018/04/18 Python
python中的插值 scipy-interp的实现代码
2018/07/23 Python
基于python实现KNN分类算法
2020/04/23 Python
python将字母转化为数字实例方法
2019/10/04 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
2020/05/11 Python
html5 canvas 实现光线沿不规则路径运动
2020/04/20 HTML / CSS
公司总经理任命书
2014/06/05 职场文书
工资收入证明样本(5篇)
2014/09/16 职场文书
旅游局领导班子“四风”问题对照检查材料思想汇报
2014/09/29 职场文书
齐云山导游词
2015/02/06 职场文书
详解python的内存分配机制
2021/05/10 Python
Python爬取某拍短视频
2021/06/11 Python
vue postcss-px2rem 自适应布局
2022/05/15 Vue.js