.Net结合JS实现URL编码与解码

2022-04-17 19:18:34
目录
解决问题1.为什么需要编码?1.1 浏览器对于中文的编码1.2 需要编码的原因还有几点2.怎样编码?3.实际出现的问题解决方法3.1.escape函数:3.2.encodeURI函数3.3.encodeURIComponent函数

在项目中碰到了ajax传来的参数,后台接收值乱码(如下图)的问题 在此记录一下

前台:

.Net结合JS实现URL编码与解码

后台:

.Net结合JS实现URL编码与解码

解决问题

为什么需要编码怎样编码实际出现的问题解决方法

1.为什么需要编码?

URL 只能使用 ASCII 字符集来通过因特网进行发送。pe("朝阳区大屯路东"), contentType: "application/json; charset=utf-8", success: function (data) { //todo成功方法 }, error: function (XMLhttpRequest, textStatus, errorThrown) { //todo失败方法 } })}

后台:

.Net结合JS实现URL编码与解码

QueryStrinqfPEcZFJtAg 这个函数会自动解码,所以不需要写什么解码的语句。

还有一点需要注意的是:

escape()不对"+"编码。但是我们知道,网页在提交表单的时候,如果有空格,则会被转化为+字符。服务器处理数据的时候,会把+号处理成空格。所以,使用的时候要小心。

3.2.encodeURI函数

这个函数才是javascript中真正用来对URL编码的函数

规则就是我上面第二部分所说的,采用utf-8编码。

前台:

.Net结合JS实现URL编码与解码

后台:

.Net结合JS实现URL编码与解码

用这个方法会存在乱码的问题,看到很多人问这问题的时候,回答者都是让采用escape这种方法,难道这样问题就解决了吗?

如果我想用jquery的serialize()方法来获取表单值并且序列化(标准URL编码)传到后台就不方便用escape啦

解决乱码问题:

出现乱码的原因是我的web.config文件里有这样的配置:

<globalization requestEncoding="gb2312" responseEncoding="gb2312" />

解决方案1:去掉这个设置或者改成utf-8的(这个方案的利害不用说,尤其是在项目已经快完成的时候)

解决方案2:利用ajax的post方法,或者用Get方法,但必须作为方法的Data参数,这样在后台接收到的数据不会被编码

前台:

$.ajax({                type: "get",                //用的是js的encodeURI方法                url: "handler/Handler.ashx",                //作为Data参数                data: { address: encodeURI("朝阳区大屯路东") },                contentType: "application/json; charset=utf-8",                success: function (data) {                //todo成功方法                },                error: function (XMLhttpRequest, textStatus, errorThrown) {                //todo失败方法                }            })

 后台:需要手动解码一次

string ad =HttpUtility.UrlDecode(context.Request["address"]);

HttpUtility.UrlDecodeServer.UrlDecode不同的是,HttpUtility.UrlDecode是有重载的,可以指定编码的方式

例如:

string adsx = HttpUtility.UrlDecode(context.Request.QueryString["address"],System.Text.Encoding.UTF8);

解决方案3:获取已编码的原始数据,自己进行解码

通过观察Request的对象,可以发现context.Request.Url.Query是未解码的数据,这就太棒了

.Net结合JS实现URL编码与解码

代码:

string address= HttpUtility.ParseQueryString(context.Request.Url.Query, Encoding.UTF8)["address"];

解决方案4(探讨):先将QueryString解码的数据按照他原来的方式进行编码,然后再用utf8进行解码,这个方法有点问题,最后一个字符会出现乱码,还没找到原因..

.Net结合JS实现URL编码与解码

在将数据编码的时候,就不是原来的浏览器发送的编码值了,正确的是最后边应该是%9C,但现在却是%3f

3.3.encodeURIComponent函数

与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。

因此,"; / ? : @ & = + $ , #",这些在encodeURI()中不被编码的符号,在encodeURIComponent()中统统会被编码

具体的编码规则是和encodeURI函数是一样的,如下,encodeURI不会编码 ? 和 @,而encodeURIComponent会

.Net结合JS实现URL编码与解码

 

encodeURIComponent这个函数就和他的名字一样,是对URI中的一个组件进行编码,不能用于全部的URI

.Net结合JS实现URL编码与解码

到此这篇关于.Net结合JS实现URL编码与解码的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。