如何在URL中对加号(+)进行编码

下面的URL链接将打开一个新的Google邮件窗口。 我遇到的问题是Google会用空格replace电子邮件正文中的所有加号(+)。 它看起来只发生在+号上。 任何build议如何补救? (我正在使用ASP.NET网页)

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

(在正文邮件中,“Hi there + Hello there”将显示为“Hi there there there”)

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

 body=Hi+there%2bHello+there 

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

 class Program { static void Main() { 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(); var url = uriBuilder.ToString(); Console.WriteLine(url); } } 

你想要一个加号(+)的身体,你必须编码为2B。

例如: 试试这个

除了那些在RFC-3986中定义为“非保留”的字符,总是对所有字符进行百分比编码更安全。

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

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

你用加号的问题是因为根据RFC-1866(HTML 2.0规范)的第8.2.1节。 第1项“,表单字段名称和值被转义:空格字符被replace为'+',然后保留字符被转义”)。 这种编码forms数据的方法也在稍后的HTML规范中给出,查找关于application / x-www-form-urlencoded的相关段落。