我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScript与C# URI编码分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScript与C# URI编码分析

本篇内容介绍了“JavaScript与C# URI编码分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

混乱的URI编码

JavaScript中编码有三种方法:escape、encodeURI、encodeURIComponent

C#中编码主要方法:HttpUtility.UrlEncode、Server.UrlEncode、Uri.EscapeUriString、Uri.EscapeDataString

JavaScript中的还好,只提供了三个,C#中主要用的就有这么多,还没有列出其他编码(HTML),一多就弄不明白,弄不明白就心生恐惧,心生恐惧就变得苦逼,本文就向大家详细解释在JavaScript及C#中如何对URI进行编码的方法(注:本文不涉及到其他编码)。

escape:不推荐使用

原因:eacape是BOM中的方法,只能对ASCII符号正确编码,而encodeURI、encodeURIComponent可以对所有的Unicode符号编码。ECMAScript v3 反对使用该方法,应用使用 decodeURI() 和 decodeURIComponent() 替代它。

escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z

encodeURI:用于对网址编码(不包含参数)

encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

encodeURI就是为这个而设计的。encodeURI不对URI中的特殊字符进行编码,如冒号(:)、斜杠(/)。下面看个示例:

encodeURI("http://www.cnblogs.com/a file with spaces.html")  // outputs http://www.cnblogs.com/a%20file%20with%20spaces.html

可以看到仅仅把空格替换成了20%,所以此方法可用于对网址进行编码。

由于encodeURI不对冒号(:)、斜杠(/)进行编码,所以如果参数(如把网址作为参数)中包含冒号(:)、斜杠(/),就会解析出错,所以此方法不能对参数进行编码。

encodeURIComponent:用于对网址参数进行编码

encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

可以看到此方法对:/都进行了编码,所以不能用它来对网址进行编码。由于此方法对中文,空格,井号(#),斜线(/),冒号(:)都进行了编码,所以适合对URI中的参数进行编码。看下面的示例:

var param="博客";  var url="http://www.cnblogs.com/?key="+encodeURIComponent(param)+"&page=1";  console.log(url);//outputs http://www.cnblogs.com/?key=%E5%8D%9A%E5%AE%A2%E5%9B%AD&page=1

可以看到,这正是我们想要的结果(这里只对需要编码的参数(page=1不需要编码)进行了编码)。

Server.UrlEncode && HttpUtility.UrlEncode:不推荐

把这两个放到一起说是因为这两个方法在绝大多数情况下是一样的。它们的区别是HttpUtility.UrlEncode默认使用UTF8格式编码,而Server.UrlEncode是使用系统预设格式编码,Server.UrlEncode使用系統预设编码做为参数调用HttpUtility.UrlEncode编码,所以如果系统全局都用UTF8格式编码,这两个方法就是一样的。

这两个方法是怎么编码的呢,我们来看个示例:

string url1 = "http://www.cnblogs.com/a file with spaces.html?a=1&b=博客#abc";  Response.Write(HttpUtility.UrlEncode(url1) );   //output  http%3a%2f%2fwww.cnblogs.com%2fa+file+with+spaces.html%3fa%3d1%26b%3d%e5%8d%9a%e5%ae%a2%e5%9b%ad%23abc

由上面的例子我们可以看出,HttpUtility.UrlEncode对冒号(:)和斜杠(/)进行了编码,所以不能用来对网址进行编码。

那么能不能对参数进行编码呢,答案也是否定的。因为在参数中空格应该被编码为%20而不是被HttpUtility.UrlEncode编码为加号(+),所以不推荐用这两个方法对URI进行编码。

Uri.EscapeUriString:用于对网址编码(不包含参数)

我们还是用例子说话:

string url1 = "http://www.cnblogs.com/a file with spaces.html?a=1&b=博客园#abc";  Response.Write( Uri.EscapeUriString(url1));  //outputs:  http://www.cnblogs.com/a%20file%20with%20spaces.html?a=1&b=%E5%8D%9A%E5%AE%A2%E5%9B%AD#abc

可以看出,Uri.EscapeUriString对空格进行了编码,也对中文进行了编码,但对冒号(:)、斜杠(/)和井号(#)未编码,所以此方法可以用于网址进行编码,但不能对参数进行编码,作用类似JavaScript中的encodeURI方法。

Uri.EscapeDataString:用于对网址参数进行编码

仍然用例子说话:

string url1 = "http://www.cnblogs.com/a file with spaces.html?a=1&b=博客#abc";  Response.Write(Uri.EscapeDataString(url1));  //outputs:  http%3A%2F%2Fwww.cnblogs.com%2Fa%20file%20with%20spaces.html%3Fa%3D1%26b%3D%E5%8D%9A%E5%AE%A2%E5%9B%AD%23abc

可以看出,Uri.EscapeDataString对冒号(:)、斜杠(/)、空格、中文、井号(#)都进行了编码,所以此方法不可以用于网址进行编码,但可以用于对参数进行编码,作用类似JavaScript中的encodeURIComponent方法。

“JavaScript与C# URI编码分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScript与C# URI编码分析

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

下载Word文档

猜你喜欢

信号与编码分析

  这篇文章,讲的是“信号与编码”,不会的小伙伴要认真的阅读了。这里面都是一些精华。模拟信号与调制方式、波特率  电路中,信号的传输从接收端在时间来看是一个波形。那么发送端就是根据数据生成这个波形,接收端就是拿到波形分析出来数据。这整个过程其实就是数据到电波的编解码,中间的载体是电路、电缆。  
信号与编码分析
2024-04-18

C++代码编写举例分析

本篇内容主要讲解“C++代码编写举例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++代码编写举例分析”吧!C++代码如下://log.h #ifndef _LOG_H_ #defi
2023-06-17

vs2022 x64 C/C++和汇编混编实例代码分析

本文小编为大家详细介绍“vs2022 x64 C/C++和汇编混编实例代码分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“vs2022 x64 C/C++和汇编混编实例代码分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来
2023-07-05

C++编译的编写及其代码问题分析

这篇文章主要介绍“C++编译的编写及其代码问题分析”,在日常操作中,相信很多人在C++编译的编写及其代码问题分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++编译的编写及其代码问题分析”的疑惑有所帮助!
2023-06-17

如何分析C++中的编译与链接

如何分析C++中的编译与链接,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前言:C++有个最大的特点,那便是编译型语言,相比于Python这种解释型语言,C++在编译阶段就
2023-06-21

C++编程之std::forward使用代码分析

今天小编给大家分享一下C++编程之std::forward使用代码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。std:
2023-07-05

C++编译环境分析

本篇内容介绍了“C++编译环境分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!源程序作为解释器输入,解释器可能会把程序转换为内部的合适的形
2023-06-17

Ceph源码编译与打包的示例分析

小编给大家分享一下Ceph源码编译与打包的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1.1clone repository源码打包docker 7u机器:lvjian100081200005.et15sqagi
2023-06-04

Go语言网络编程与Http源码分析

这篇文章主要介绍“Go语言网络编程与Http源码分析”,在日常操作中,相信很多人在Go语言网络编程与Http源码分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言网络编程与Http源码分析”的疑惑有所
2023-07-05

JavaScript中变量提升与预编译的示例分析

这篇文章主要为大家展示了JavaScript中变量提升与预编译的示例分析,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“JavaScript中变量提升与预编译的示例分析”这篇文章吧。Java的特点有
2023-06-06

C++代码编制和语句序列举例分析

这篇文章主要讲解了“C++代码编制和语句序列举例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++代码编制和语句序列举例分析”吧!调试标记 适用预处理#define定义一个或多个调试标
2023-06-17

JavaScript中React面向组件编程实例代码分析

今天小编给大家分享一下JavaScript中React面向组件编程实例代码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
2023-07-05

JavaScript运算符与表达式实例代码分析

本篇内容主要讲解“JavaScript运算符与表达式实例代码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript运算符与表达式实例代码分析”吧!一、===严格相等运算符,用作逻
2023-07-06

TypeScript与JavaScript的区别分析

TypeScript可以使用JavaScript中的所有代码和编程概念,TypeScript是为了使JavaScript的开发变得更加容易而创建的。推荐先精通JS的的前提下再学习TS,这样更有利于同时学习两门语言。
2022-12-30

编程热搜

目录