如何实现.Net Core对网址或参数进行多种urlencode编码操作?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1165个文字,预计阅读时间需要5分钟。
对字符串进行编码(urlencode)有以下几种常见方法,每种语言都有多种实现方式,最大的不同在于对待加号、空格等特殊字符的处理:
1. Python: - 使用 `urllib.parse.quote` 或 `urllib.parse.quote_plus`。 - `quote` 对空格编码为 `%20`,而 `quote_plus` 对空格编码为 `%20` 或 `+`。
2. JavaScript: - 使用 `encodeURIComponent`。 - 默认情况下,对空格编码为 `%20`。
3. PHP: - 使用 `urlencode`。 - 默认情况下,对空格编码为 `%20`。
4. Java: - 使用 `java.net.URLEncoder`。 - 默认情况下,对空格编码为 `%20`。
5. C#: - 使用 `HttpUtility.UrlEncode`。 - 默认情况下,对空格编码为 `%20`。
对待加号和空格的处理方式:- 大多数编码函数默认将空格编码为 `%20`。- 对于加号 `+`,通常不编码,因为它是URL中查询参数分隔符的默认字符。
不同编码区的本质区别在于采用的编码规则:- `urlencode` 通常用于表单提交,对特殊字符进行编码,如 `+` 转换为 `%2B`,空格转换为 `%20`。- `encodeURIComponent` 通常用于JavaScript,对非保留字符进行编码,保留字符如字母、数字、`-`、`_`、`.`、`!`、`~`、`*` 和 `/` 不编码。
对一个字符串进行编码 ( urlencode ) 有好几种方法,每个语言都有好几种方式,而这些方法最大的不同,就是如何对待加号+和空格。
而它们的本质区别,就是采用何种编码规范:
- 如果遵循 W3C/HTML 编码,那么,空格会转换成加号
+。 - 如果遵循 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++
从结果中可以看出:
-
HttpUtility.UrlEncode会将空格转换为+号,而将+编码为%2b。 -
HttpUtility.UrlPathEncode会将空格转换为%20而保持+号不变。 -
Uri.EscapeDataString既会编码+号也会编码空格。 -
Uri.EscapeUriString已经废弃了,作用和HttpUtility.UrlPathEncode是一模一样。
所以,用谁不用说了吧,果断上Uri.EscapeDataString
参考来源:www.twle.cn/t/37493
本文共计1165个文字,预计阅读时间需要5分钟。
对字符串进行编码(urlencode)有以下几种常见方法,每种语言都有多种实现方式,最大的不同在于对待加号、空格等特殊字符的处理:
1. Python: - 使用 `urllib.parse.quote` 或 `urllib.parse.quote_plus`。 - `quote` 对空格编码为 `%20`,而 `quote_plus` 对空格编码为 `%20` 或 `+`。
2. JavaScript: - 使用 `encodeURIComponent`。 - 默认情况下,对空格编码为 `%20`。
3. PHP: - 使用 `urlencode`。 - 默认情况下,对空格编码为 `%20`。
4. Java: - 使用 `java.net.URLEncoder`。 - 默认情况下,对空格编码为 `%20`。
5. C#: - 使用 `HttpUtility.UrlEncode`。 - 默认情况下,对空格编码为 `%20`。
对待加号和空格的处理方式:- 大多数编码函数默认将空格编码为 `%20`。- 对于加号 `+`,通常不编码,因为它是URL中查询参数分隔符的默认字符。
不同编码区的本质区别在于采用的编码规则:- `urlencode` 通常用于表单提交,对特殊字符进行编码,如 `+` 转换为 `%2B`,空格转换为 `%20`。- `encodeURIComponent` 通常用于JavaScript,对非保留字符进行编码,保留字符如字母、数字、`-`、`_`、`.`、`!`、`~`、`*` 和 `/` 不编码。
对一个字符串进行编码 ( urlencode ) 有好几种方法,每个语言都有好几种方式,而这些方法最大的不同,就是如何对待加号+和空格。
而它们的本质区别,就是采用何种编码规范:
- 如果遵循 W3C/HTML 编码,那么,空格会转换成加号
+。 - 如果遵循 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++
从结果中可以看出:
-
HttpUtility.UrlEncode会将空格转换为+号,而将+编码为%2b。 -
HttpUtility.UrlPathEncode会将空格转换为%20而保持+号不变。 -
Uri.EscapeDataString既会编码+号也会编码空格。 -
Uri.EscapeUriString已经废弃了,作用和HttpUtility.UrlPathEncode是一模一样。
所以,用谁不用说了吧,果断上Uri.EscapeDataString
参考来源:www.twle.cn/t/37493

