iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >.Net结合JS实现URL编码与解码
  • 215
分享到

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

2024-04-02 19:04:59 215人浏览 泡泡鱼
摘要

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

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

前台:

后台:

解决问题

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

1.为什么需要编码?

URL 只能使用 ASCII 字符集来通过因特网进行发送。
也就是说URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号

这意味着 如果URL中有汉字,就必须编码后使用。

但是麻烦的是 标准的国际组织并没有规定具体的编码方法,而是交给应用程序(浏览器)自己决定。

这导致"URL编码"成为了一个混乱的领域。 

1.1 浏览器对于中文的编码

Chrome浏览器和火狐的浏览器是一样的如下图,"文"和"章"的utf-8编码分别是"E6 96 87"和"E7 AB A0" ,

下图所示的"%e6%96%87%e7%ab%a0"就是按照顺序,在每个字节前加上%而得到的

Edge浏览器和IE浏览器是一样的,如下图 这个的编码方式我没看出来,希望高手指点

1.2 需要编码的原因还有几点

你有没有想过,Ukey=value这种传参方式式中, Value中包含 ?或者 = 怎么办呢

你有没有想过,不同的操作系统、浏览器、不同的网页字符集(charset)会对你的传值造成影响呢

如果你都考虑过,毫无疑问你早就知道需要编码的原因了

2.怎样编码?

Url编码通常也被称为百分号编码(percent-encoding),是因为它的编码方式非常简单,

使用%百分号加上两位的字符——0123456789ABCDEF——代表一个字节的十六进制形式

对于ASCII字符,字母a 在ASCII码中对应的字节是0x61,那么Url编码之后得到的就是%61,

字母abc, url编码后得到的就是%61%62%63

对于非ASCII字符,RFC文档建议使用utf-8对其进行编码得到相应的字节,然后对每个字节执行百分号编码。

如"中文"使用UTF-8字符集得到的字节为0xE4 0xB8 0xAD 0xE6 0x96 0x87,经过Url编码之后得到"%E4%B8%AD%E6%96%87"。

使用javascript先对URL编码,然后再向服务器提交,不要给浏览器插手的机会
这样就能保证客户端只用一种编码方法向服务器发出请求

3.实际出现的问题解决方法

首先说一下js的三种编码函数,escapeencodeURIencodeURIComponent

3.1.escape函数:

js中编码出生最早的一个,不提倡使用,原因是它不符合我上边(【怎样】)说的url编码原则

真正作用是:

返回一个字符的Unicode编码值,为的是方便他们能在所有计算机上可读

具体规则是:

所有空格、标点以及其他非ASCII字符都用%xx编码替换; 例如空格返回的是%20 字符值大于255的字符以%uxxxx格式储存

所以以后如果看到%u的编码,那就是escape函数

看下边这个列子 你就很清楚的知道它的具体转换规则了

项目中使用:

前台:

function HandlerAddress() {
            $.ajax({
                type: "get",
                //用的是js的escape方法
                url: "handler/Handler.ashx?address=" + escape("朝阳区大屯路东"),
                contentType: "application/JSON; charset=utf-8",
                success: function (data) {
                //todo成功方法
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                //todo失败方法
                }
            })
}

后台:

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

还有一点需要注意的是:

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

3.2.encodeURI函数

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

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

前台:

后台:

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

如果我想用Jqueryserialize()方法来获取表单值并且序列化(标准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是未解码的数据,这就太棒了

代码:

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

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

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

3.3.encodeURIComponent函数

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

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

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

 

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

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

--结束END--

本文标题: .Net结合JS实现URL编码与解码

本文链接: https://www.lsjlt.com/news/144134.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • .Net结合JS实现URL编码与解码
    目录解决问题1.为什么需要编码?1.1 浏览器对于中文的编码1.2 需要编码的原因还有几点2.怎样编码?3.实际出现的问题解决方法3.1.escape函数:3.2.encodeURI...
    99+
    2024-04-02
  • Java结合JS实现URL编码与解码
    通常如果一样东西需要编码,说明这样东西并不适合传输。原因多种多样,如Size过大,包含隐私数据,对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义。 例如,Url参数...
    99+
    2024-04-02
  • js对url进行编码解码的三种方式总结
    目录第一种:escape 和 unescape第二种:encodeURI 和 decodeURI第三种:encodeURIComponent 和 decodeURIComponent...
    99+
    2023-02-14
    js url编码解码 url编码和解码 js转码和解码
  • js中如何对url进行编码和解码
    目录js 对url进行编码和解码三种编码和解码函数js url二次编码和解码问题URL编码解码原理js 对url进行编码和解码 三种编码和解码函数 encodeURI和 decode...
    99+
    2022-11-16
    js url js对url进行编码 js对url进行解码
  • 与ChatGPT结对编程实现代码详解
    目录以终为始如何编写一个节点编写主干逻辑边界划分功能迭代总结一下以终为始 按照上一篇的架构,我们整个程序最后写完的运行视图大概是下面这个样子的: 可以看出我们的实际结果比我们上一...
    99+
    2023-03-21
    ChatGPT编写代码 ChatGPT编程
  • js对url进行编码解码的方式有哪些
    使用encodeURIComponent()和decodeURIComponent()函数: // 编码 var encoded...
    99+
    2024-03-08
    JS
  • Go语言实现Base64、Base58编码与解码
    目录1. 常见的编码2. go语言实现base64的编码与解码2.1 Base64编码原理2.2 实现Base64的编码与解码3. go语言实现base58编码与解码3.1 base...
    99+
    2024-04-02
  • Golang与FFmpeg: 如何实现音频解码与编码
    要在Golang中实现音频解码和编码,可以使用FFmpeg库。FFmpeg是一个开源的多媒体处理库,可以处理音频、视频和流媒体。首先...
    99+
    2023-10-20
    Golang
  • Java实现UTF-8编码与解码方式
    目录Java实现UTF-8编码与解码使用UTF-8或GBK编码后还是乱码的问题两者的区别是总结Java实现UTF-8编码与解码 Java代码如下: import java.net.U...
    99+
    2023-05-15
    Java UTF-8编码 Java UTF-8解码 Java UTF-8
  • Java怎么实现UTF-8编码与解码
    这篇文章主要介绍了Java怎么实现UTF-8编码与解码的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java怎么实现UTF-8编码与解码文章都会有所收获,下面我们一起来看看吧。Java实现UTF-8编码与解码J...
    99+
    2023-07-06
  • C#实现Base64编码与解码及规则
    一、编码规则 Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码。它将需要编码的数据拆分成字节数组。以3个字节为一组。按顺序排列24 位数据,再把这24位...
    99+
    2024-04-02
  • Python将内容进行base64编码与解码实现
    目录一、需求说明二、base64简介三、base64编码解码3.1、Python中base64编码解码3.2、Python使用示例一、需求说明 需要使用Python实现将内容转为ba...
    99+
    2023-03-01
    Python base64编码与解码 Python base64编码
  • Python实现将内容转为base64编码与解码
    目录一、需求说明二、base64简介三、base64编码解码3.1、Python中base64编码解码3.2、Python使用示例一、需求说明 需要使用Python实现将内容转为ba...
    99+
    2023-02-26
    Python内容转base64编码解码 Python内容转base64编码 Python base64
  • 计算机知识碎片 base64 url编码解码 编译与反编译 Demo 序列化
    base64 base64 编码普遍应用于需要通过被设计为处理文本数据的媒介上储存和传输二进制数据而需要编码该二进制数据的场景。这样是为了保证数据的完整并且不用在传输过程中修改这些数据。 url编码解...
    99+
    2023-10-07
    php 网络 服务器
  • js如何实现哈弗曼编码
    小编给大家分享一下js如何实现哈弗曼编码,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!需要的朋友可以参考下哈夫曼编码,根据每个单...
    99+
    2024-04-02
  • Netty结合Protobuf进行编解码的方法
     一般在使用netty时,数据传输的时候都会选择对传输的数据进行编解码,编码后的数据变小, 有利于在有限的带宽下传输更多的数据。 由于java本身序列化的缺点较多(无法跨...
    99+
    2024-04-02
  • C#Unicode编码解码的实现
    Unicode是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制...
    99+
    2024-04-02
  • 怎么用JS实现代码编译器
    本篇内容介绍了“怎么用JS实现代码编译器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、前言对于前端同学...
    99+
    2024-04-02
  • C# Unicode编码解码如何实现
    本文小编为大家详细介绍“C# Unicode编码解码如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“C# Unicode编码解码如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。U...
    99+
    2023-07-02
  • Python如何实现将内容转为base64编码与解码
    今天小编给大家分享一下Python如何实现将内容转为base64编码与解码的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作