关于HttpUtility.UrlEncode编码的问题-程序员宅基地

技术标签: C#  

问题:系统开发过程中需要用到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[] 类型

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Zhu_daye/article/details/102668386

智能推荐

android.content.res.Resources$NotFoundException: Resource ID #0xfffffe6c (使用BaseRecyclerViewAdapt)-程序员宅基地

文章浏览阅读3.8k次。错误:android.content.res.Resources$NotFoundException: Resource ID #0xfffffe6c 意思是资源ID找不到。然后又在报错中出现跟BaseQuickAdapter相关信息,可以分为两个方面,第一个是在加载Adapter Item取控件的时候为空,第二个是加载不同View的时候为空。 View inflate = g..._android.content.res.resources$notfoundexception: resource id #0xfffffe6c

RPA认证 Developer UIPath Certificate,细说uipath认证学习,Online Quiz和Practical Exam项目详解-程序员宅基地

文章浏览阅读2.1w次,点赞11次,收藏61次。UIPath,RPA里算是比较简单易操作的一款软件了,因为公司业务的需要,代理uipath以及部署业务,所以接触到了uipath。从开始到最终做到企业项目部署,大概用了两个月的时间,收获不少。自己之前是做过后端开发,前端以及手机端软件自动化的相关开发工作(触动sprite…),所以学习起来挺快的。最终花了两周多的时间,阅读了官方的文档,uiapth官方的学院,以及第三方一些文档,完成了整个uipa..._uipath认证

<VBScript>终极破产版石头剪刀布游戏(VBS语言实现)_vbs石头剪刀布-程序员宅基地

文章浏览阅读1.8k次,点赞6次,收藏4次。前几天拜读失泽久雄先生所著写的《计算机是怎样跑起来的》,当时看书中的代码用VBS语言写的一个石头剪刀布游戏特别好玩,于是手敲了一遍,并做了些改进——石头剪刀布小游戏。结果后来给一个朋友看,发现有bug,于是又在网上查了些资料,做了一些改进,此次带来石头剪刀布3.0破产版,哈哈哈。以下为代码实现,尽管简陋,不过有兴趣玩的朋友可以用Windows自带的笔记本把下面的代码粘过去,文档后缀名改成 .V..._vbs石头剪刀布

就是要让你搞懂Nginx,这篇就够了!-程序员宅基地

文章浏览阅读98次。开源Linux长按二维码加关注~作者:渐暖°出处:blog.csdn.net/yujing1314/article/details/107000737来源:公众号51CTO技术栈Ng..._nginx不开源的如何使用

JavaWeb书城项目(二)——用户注册和登录_传智书城项目设计报告 javaweb用户注册-程序员宅基地

文章浏览阅读1.7k次,点赞3次,收藏17次。之前已经做好前端页面,现在要通过 servlet 程序以及 JDBC 具体实现用户注册和登录JavaEE项目的三层架构为什么要分层呢?通过一层完成所有事情不行吗?分层的目的是为了解耦。解耦就是为了降低代码的耦合度。方便项目后期的维护和升级。我们知道有些项目代码量是巨大的,如果放在一层后期维护和升级会很麻烦,如果分出不同的层,每层都有不同负责的人员,那么维护和升级会变得轻松很多。需要的接口和类web 层 com.atguigu.web/servlet/controllerservice 层._传智书城项目设计报告 javaweb用户注册

Ubuntu 系统 安装完Nginx和php后 能打开html .php提示下载或者connect() failed (111: Connection refused) while connectin_unix:/run/php/php8.3-fpm.sock failed (111: unknown-程序员宅基地

文章浏览阅读175次。php 版本为7.11.vim www.conf保存退出 重启php2.配置Nginx服务器vim /etc/nginx/nginx.conf在http{}中末尾添加或者在引用服务器域名配置的文件夹下新建一个文件也行我不知道为什么用fastcgi_pass unix:/var/run/php/php7.1-fpm.sock这个不行 但是fastcgi_pass 127.0.0..._unix:/run/php/php8.3-fpm.sock failed (111: unknown error) while connecti

随便推点

为什么在java中计算2的32次方可以用1L左移32表示_java中2的32次方如何表示-程序员宅基地

文章浏览阅读6.5k次。为什么在java中计算2的32次方可以用1L&lt;&lt;32表示 java中移位运算符&lt;&lt; : 左移运算符,num &lt;&lt; 1,相当于num乘以2&gt;&gt; : 右移运算符,num &gt;&gt; 1,相当于num除以22的32次方,相当于32个2相乘1L&lt;&lt;32 ,不就是1乘以32个2 ,二者相等。&lt;&_java中2的32次方如何表示

ADC触摸屏编程测试笔记_韦东山老师_adc_cnt-程序员宅基地

文章浏览阅读484次。首先我们要先知道触摸屏,他是透明的薄膜,LCD和触摸屏是两个不同的设备。我们不能把它混为一谈,触摸屏是触摸屏LCD是LCD。从韦老师的博客我们知道或者说百度,实际上触摸屏是由两层膜组成,我的理解是这样子更加方便ADC测量,也就是去进行精准位置。在学习ADC触摸屏编程测试的时候遇到一个问题,那就是在点击A点的时候自动跳过了B点直接到达C点位置校准。经过韦老师的分析加上自己的理解也终于明白..._adc_cnt

查看堆栈信息_hprof文件可以看到堆栈信息-程序员宅基地

文章浏览阅读1.3k次。本文不做说明,记录工作上内存泄漏相关定位工具生成堆栈文件通过jdk自带工具生成,线上使用的时候执行的时候提示找不到pid对应的文件,加上-F参数可以强制关联上jmap -F -dump:format=b,file=d:\dump\heap.hprof <pid>下面这个没有使用过,目测可以jcmd <pid> GC.heap_dump d:\dump\h..._hprof文件可以看到堆栈信息

service和systemctl的区别_systemctl service-程序员宅基地

文章浏览阅读1w次,点赞8次,收藏49次。Linux服务管理的两种方式service和systemctl。serviceservice命令其实是去/etc/init.d目录下,去执行相关程序,init.d目录包含许多系统各种服务的启动和停止脚本。当Linux启动时,会寻找这些目录中的服务脚本,并根据脚本的run level确定不同的启动级别。参考这篇文章,了解系统启动的过程及centos和ubuntu的区别。service的常用方式:1.格式:service <service>打印指定服务<service>的_systemctl service

Spine 事件-程序员宅基地

文章浏览阅读5k次。Spine 事件大家好,我是笨笨,笨笨的笨,笨笨的笨,谢谢!欢迎加入专业Spine技术交流群 Spine2D骨骼动画 7708065此文最初发表在群论坛,但后来腾讯放弃了群论坛所以迁至此处转载请保留原始链接:https://blog.csdn.net/jx520/article/details/83047366事件是动画过程中所发生情况的触发器。例如,当人物碰到地面发出声音。事件不限于音..._spine 事件

UNITY中判断两个点之间距离的方法_unity 判断两个距离-程序员宅基地

文章浏览阅读3.1k次,点赞3次,收藏4次。Vector3.SqrMagnitude与Vector3.Distance_unity 判断两个距离

推荐文章

热门文章

相关标签