当前位置 : 主页 > 网络编程 > net编程 >

.Net Core 对网址或参数进行编码 (urlencode) 的几种方式

来源:互联网 收集:自由互联 发布时间:2023-09-03
对一个字符串进行编码 ( urlencode ) 有好几种方法,每个语言都有好几种方式,而这些方法最大的不同,就是如何对待加号​ ​+​ ​和空格。 而它们的本质区别,就是采用何种编码规范

对一个字符串进行编码 ( urlencode ) 有好几种方法,每个语言都有好几种方式,而这些方法最大的不同,就是如何对待加号 ​​+​​ 和空格 。

而它们的本质区别,就是采用何种编码规范:

  1. 如果遵循 W3C/HTML 编码,那么,空格会转换成加号 ​​+​​。
  2. 如果遵循 RFC2395,那么空格则会转换成 ​​%20​​​,加号 ​​+​​​ 则会转换成 ​​%2b​​。

正常情况下,我们所说的对网址进行编码或对参数进行编码,说的就是遵循 RFC2395 规范。

.NET Core 和 C# 语言也提供了很多种方式来处理这种编码

HttpUtility.UrlEncode (不推荐)
HttpUtility.UrlPathEncode
Server.UrlEncode (不推荐,asp.net 专有)
Uri.EscapeUriString
Uri.EscapeDataString

对于他们之间的差别,我们先来看一个例子

// See https://aka.ms/new-console-template for more information
using System.Web;

String hello = "Hello World ++";
Console.WriteLine(hello);
Console.WriteLine(HttpUtility.UrlEncode(hello));
Console.WriteLine(HttpUtility.UrlPathEncode(hello));
Console.WriteLine(Uri.EscapeDataString(hello));
Console.WriteLine(Uri.EscapeUriString(hello));

// asp.net 中特有的
//Console.WriteLine(Server.UrlEncode(hello));

输出结果如下

Hello World ++
Hello+World+%2b%2b
Hello%20World%20++
Hello%20World%20%2B%2B
Hello%20World%20++

从结果中可以看出:

  1. ​HttpUtility.UrlEncode​​​ 会将空格转换为 ​​+​​​ 号,而将 ​​+​​​ 编码为 ​​%2b​​。
  2. ​HttpUtility.UrlPathEncode​​​ 会将空格转换为 ​​%20​​​ 而保持 ​​+​​ 号不变。
  3. ​Uri.EscapeDataString​​​ 既会编码 ​​+​​ 号也会编码空格。
  4. ​Uri.EscapeUriString​​​ 已经废弃了,作用和 ​​HttpUtility.UrlPathEncode​​ 是一模一样。

所以,用谁不用说了吧,果断上 ​​Uri.EscapeDataString​​ 

参考来源:​​https://www.twle.cn/t/37493​​

上一篇:C#/VB.NET:如何将PDF转为PDF/A
下一篇:没有了
网友评论