asp.net 如何编码URL中的加号(+)

brccelvz  于 2022-12-01  发布在  .NET
关注(0)|答案(6)|浏览(599)

下面的URL链接将打开一个新的Google邮件窗口。我遇到的问题是Google将电子邮件正文中的所有加号(+)替换为空格。看起来只有在使用+符号时才会出现这种情况。我该如何解决这个问题?(我正在处理一个ASP.NET网页。)
https://mail.google.com/mail?view=cm&tf=0&to=someemail@somedomain.com&su=some subject&body=大家好+大家好
(In正文电子邮件“Hi there+Hello there”将显示为“Hi there Hello there”)

dfty9e19

dfty9e191#

+字符在URL中有一个特殊的含义=〉它意味着空白-``。如果你想使用字面意义上的+符号,你需要将其URL编码为%2b

body=Hi+there%2bHello+there

下面是一个如何在.NET中正确生成URL的示例:

var uriBuilder = new UriBuilder("https://mail.google.com/mail");

var values = HttpUtility.ParseQueryString(string.Empty);
values["view"] = "cm";
values["tf"] = "0";
values["to"] = "someemail@somedomain.com";
values["su"] = "some subject";
values["body"] = "Hi there+Hello there";

uriBuilder.Query = values.ToString();

Console.WriteLine(uriBuilder.ToString());

结果
https://mail.google.com:443/mail?view=cm&tf=0&to=someemail%40somedomain.com&su=some+subject&body=Hi+there%2bHello+there

vltsax25

vltsax252#

如果你想在正文中加上+符号,你必须将其编码为2B
例如:Try this

t5fffqht

t5fffqht3#

要使用JavaScript对+值进行编码,可以使用encodeURIComponent函数。
示例:

var url = "+11";
var encoded_url = encodeURIComponent(url);
console.log(encoded_url)
toe95027

toe950274#

除了在RFC-3986中定义为“未保留”的字符之外,始终对所有字符进行百分比编码更安全。
未保留的=字母/数字/“-”/“.”/“_”/“~”
因此,对加号字符和其他特殊字符进行百分号编码。
您遇到加号的问题是因为,根据RFC-1866(HTML 2.0规范)第8.2.1.段第1.小段,“表单字段名称和值被转义:空格字符被替换为'+',然后保留字符被转义”)。这种表单数据的编码方式在以后的HTML规范中也有介绍,请查找有关application/x-www-form-urlencoded的相关段落。

kh212irz

kh212irz5#

下面我们将把这个添加到列表中:

Uri.EscapeUriString("Hi there+Hello there") // Hi%20there+Hello%20there
Uri.EscapeDataString("Hi there+Hello there") // Hi%20there%2BHello%20there

请参阅https://stackoverflow.com/a/34189188/98491
通常您会希望使用EscapeDataString,这样做是正确的。

inn6fuwd

inn6fuwd6#

一般来说,如果你使用.NET API的-new Uri("someproto:with+plus").LocalPathAbsolutePath会在URL中保留加号字符。(相同的"someproto:with+plus"字符串)
但是Uri.EscapeDataString("with+plus")将转义加号字符并将产生"with%2Bplus"
为了保持一致,我建议总是将加号转义为"%2B",并在任何地方使用它--这样就不需要猜测谁在想什么,以及你的加号是什么。
我不知道为什么从转义字符'+'解码会产生空格字符' '-但显然这是一些组件的问题。

相关问题