有哪些方法可以实现 .Net Core 对网址或参数的 urlencode 编码?

更新于
2026-07-26 11:44:42
13阅读来源:SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1158个文字,预计阅读时间需要5分钟。

有哪些方法可以实现 .Net Core 对网址或参数的 urlencode 编码?

对字符串进行编码(urlencode)有多种方法,每种语言都有其独特的编码方式。这些方法的最大不同之处在于如何处理待编码字符中的加号(+)和空格。以下是几种常见的编码方法和它们对待加号和空格的处理方式:

1. PHP: - 使用 `urlencode()` 函数。 - 加号(+)被编码为 `%2B`。 - 空格被编码为 `%20`。

2. Python: - 使用 `urllib.parse.quote()` 函数。 - 加号(+)被编码为 `%2B`。 - 空格被编码为 `%20`。

3. JavaScript: - 使用 `encodeURIComponent()` 函数。 - 加号(+)被编码为 `%2B`。 - 空格被编码为 `%20`。

4. Java: - 使用 `URLEncoder` 类。 - 加号(+)被编码为 `%2B`。 - 空格被编码为 `%20`。

5. C#: - 使用 `HttpUtility.UrlEncode()` 方法。 - 加号(+)被编码为 `%2B`。 - 空格被编码为 `%20`。

这些方法对待加号和空格的处理方式相同,但它们的本质区别在于采用的编码规范。例如,某些编码规范可能要求对特定的字符集进行编码,而其他规范可能对字符的编码有更严格的限制。

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

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

有哪些方法可以实现 .Net Core 对网址或参数的 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 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​

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

本文共计1158个文字,预计阅读时间需要5分钟。

有哪些方法可以实现 .Net Core 对网址或参数的 urlencode 编码?

对字符串进行编码(urlencode)有多种方法,每种语言都有其独特的编码方式。这些方法的最大不同之处在于如何处理待编码字符中的加号(+)和空格。以下是几种常见的编码方法和它们对待加号和空格的处理方式:

1. PHP: - 使用 `urlencode()` 函数。 - 加号(+)被编码为 `%2B`。 - 空格被编码为 `%20`。

2. Python: - 使用 `urllib.parse.quote()` 函数。 - 加号(+)被编码为 `%2B`。 - 空格被编码为 `%20`。

3. JavaScript: - 使用 `encodeURIComponent()` 函数。 - 加号(+)被编码为 `%2B`。 - 空格被编码为 `%20`。

4. Java: - 使用 `URLEncoder` 类。 - 加号(+)被编码为 `%2B`。 - 空格被编码为 `%20`。

5. C#: - 使用 `HttpUtility.UrlEncode()` 方法。 - 加号(+)被编码为 `%2B`。 - 空格被编码为 `%20`。

这些方法对待加号和空格的处理方式相同,但它们的本质区别在于采用的编码规范。例如,某些编码规范可能要求对特定的字符集进行编码,而其他规范可能对字符的编码有更严格的限制。

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

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

有哪些方法可以实现 .Net Core 对网址或参数的 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 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​

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