如何在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的相关段落。
- 如何“热身”entity framework? 什么时候变“冷”?
- 如何更改DataTable列名称?
- 在控制器ASP.NET MVC中获取项目根path?
- 无法将MySQLdate/时间值转换为System.DateTime
- 检测到ASP.NET网页的冲突版本:指定的版本是“1.0.0.0”,但bin中的版本是“2.0.0.0”
- 在Azure / IIS7中删除/隐藏/禁用过多的HTTP响应头,无需UrlScan
- 无法将“System.DBNull”types的对象转换为键入“System.String”
- ASP.net检查页面是http还是https
- 浏览器或选项卡closures时closures/closures会话