关于HttpUtility.UrlEncode编码的问题

问题:系统开发过程中需要用到UrlEncode进行重新编码,但是编码后解码始终对应不起来。

开始在后台执行UrlEncode()方法后,js里进行replace()后解码。

如下:

//后台
var Str = HttpUtility.UrlEncode("h t t p s://blog.csdn.net/Zhu_daye");
//执行上语句后 Str = "h+t+t+p+s%3a%2f%2fblog.csdn.net%2fZhu_daye";
//js
Str = Str.replace(/\+/g, '%20');    //Str即后台传来编码后的字符串
var JsStr = decodeURIComponent(Str);    //执行后JsStr = "h+t+t+p+s://blog.csdn.net/Zhu_daye";

可以看到解码后并不是原来的字符串,解决方法如下:

//后台
var Str = HttpUtility.UrlEncode("h t t p s://blog.csdn.net/Zhu_daye");
Str = Str.Replace("+", "%20");    //将加号(+)即原字符中的空格替换替换成%20(正确编码后的字符)。
//执行后 Str = "h%20t%20t%20p%20s%3a%2f%2fblog.csdn.net%2fZhu_daye";
//js
//Str即后台传来编码后的字符串
var JsStr = decodeURIComponent(Str);    //执行后JsStr = "h+t+t+p+s://blog.csdn.net/Zhu_daye";

就是将编码后空格转换的加号在后台处理了,js中仅做解码操作。

因为此方法将空格转换成“+”号没有转换成%20,所以在解码的时候要将“+”号转换成%20后进行解码。

使用HttpUtility.UrlEncode(str)方法编码后对url及参数都进行了编码,其中

冒号(:):%3a

斜杠(/):%2f

空格( ):+

问号(?):%3f

等号(=):%3d

与号(&):%26

井号(#):%23

加号(+):%2b

如果参数中有空格并没有转成 %20,而是转成了“+”号,则需要replace一下。

除此之外HttpUtility.UrlEncode方法还有3个重载分别如下

1.使用HttpUtility.UrlEncode(str, Encoding.UTF8)

多了一个参数,可以指定编码类型而已

2.使用HttpUtility.UrlEncode(byte[] bytes) 将字节数组转换为编码的 URL 字符串。
HttpUtility.UrlEncode(byteArray);     对字节数组进行编码,byteArray 为 bate[] 类型

3.使用HttpUtility.UrlEncode(byte[] bytes, int offset, int count);从数组中指定位置开始,按照指定字节数量,将字节数组转换为 URL 编码的字符串。
HttpUtility.UrlEncode(byteArray,0,6);    对字节数组进行编码,从0位置开始去5个,byteArray 为 bate[] 类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值