下面的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”)
6条答案
按热度按时间dfty9e191#
+
字符在URL中有一个特殊的含义=〉它意味着空白-``。如果你想使用字面意义上的+
符号,你需要将其URL编码为%2b
:下面是一个如何在.NET中正确生成URL的示例:
结果
https://mail.google.com:443/mail?view=cm&tf=0&to=someemail%40somedomain.com&su=some+subject&body=Hi+there%2bHello+there
vltsax252#
如果你想在正文中加上
+
符号,你必须将其编码为2B
。例如:Try this
t5fffqht3#
要使用JavaScript对
+
值进行编码,可以使用encodeURIComponent
函数。示例:
toe950274#
除了在RFC-3986中定义为“未保留”的字符之外,始终对所有字符进行百分比编码更安全。
未保留的=字母/数字/“-”/“.”/“_”/“~”
因此,对加号字符和其他特殊字符进行百分号编码。
您遇到加号的问题是因为,根据RFC-1866(HTML 2.0规范)第8.2.1.段第1.小段,“表单字段名称和值被转义:空格字符被替换为'+',然后保留字符被转义”)。这种表单数据的编码方式在以后的HTML规范中也有介绍,请查找有关application/x-www-form-urlencoded的相关段落。
kh212irz5#
下面我们将把这个添加到列表中:
请参阅https://stackoverflow.com/a/34189188/98491
通常您会希望使用
EscapeDataString
,这样做是正确的。inn6fuwd6#
一般来说,如果你使用.NET API的-
new Uri("someproto:with+plus").LocalPath
或AbsolutePath
会在URL中保留加号字符。(相同的"someproto:with+plus"
字符串)但是
Uri.EscapeDataString("with+plus")
将转义加号字符并将产生"with%2Bplus"
。为了保持一致,我建议总是将加号转义为
"%2B"
,并在任何地方使用它--这样就不需要猜测谁在想什么,以及你的加号是什么。我不知道为什么从转义字符
'+'
解码会产生空格字符' '
-但显然这是一些组件的问题。