如何编码URL中的加号(+)符号

时间:2011-03-27 15:27:16

标签: asp.net c#-4.0 gmail urlencode html-encode

以下网址链接将打开一个新的Google邮件窗口。我遇到的问题是Google用空格替换了电子邮件正文中的所有加号(+)。看起来它只发生在+符号上。有关如何解决这个问题的任何建议? (我正在使用ASP.NET网页)

https://mail.google.com/mail?view=cm&tf=0&to=someemail@somedomain.com&su=some主题和身体=你好+你好

(在正文电子邮件中,“你好+你好那里”将显示为“你好你好那里”)

5 个答案:

答案 0 :(得分:81)

+字符在url =>中具有特殊含义它意味着空白。如果您想使用+符号,则需要对其进行URL编码:

body=Hi+there%2bHello+there

以下是如何在.NET中正确生成网址的示例:

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

答案 1 :(得分:15)

你想在身体中加一个加号(+),你必须将它编码为2B。

例如: Try this

答案 2 :(得分:2)

始终对所有字符进行百分比编码更安全,除了RFC-3986中定义为“未预留”的字符外。

unreserved = ALPHA / DIGIT /“ - ”/“。” /“_”/“〜”

因此,百分比编码加号字符和其他特殊字符。

根据RFC-1866(HTML 2.0规范)第8.2.1段,您遇到的问题是因为这个问题。第1段,“表格字段名称和值被转义:空格字符被替换为'+',然后保留字符被转义”)。这种编码表单数据的方式也在后面的HTML规范中给出,查找有关application / x-www-form-urlencoded的相关段落。

答案 3 :(得分:2)

对于javascript语言,使用encodeURIComponent函数对特殊字符进行编码

答案 4 :(得分:1)

只需将其添加到列表中即可:

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来正确处理。