以下网址链接将打开一个新的Google邮件窗口。我遇到的问题是Google用空格替换了电子邮件正文中的所有加号(+)。看起来它只发生在+符号上。有关如何解决这个问题的任何建议? (我正在使用ASP.NET网页)
https://mail.google.com/mail?view=cm&tf=0&to=someemail@somedomain.com&su=some主题和身体=你好+你好
(在正文电子邮件中,“你好+你好那里”将显示为“你好你好那里”)
答案 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());
结果
答案 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
来正确处理。