如何在邮件客户端的mailto链接中处理&符号?

时间:2009-06-08 15:27:34

标签: c# email

我有一个ASP.NET / C#应用程序,其中一部分将WWW链接转换为HTML电子邮件中的mailto链接。

例如,如果我有一个链接,例如:

  

www.site.com

它被重写为:

  

的mailto:?my@address.com主题= www.site.com

这非常有效,直到我遇到带有&符号的URL,然后导致主题被截断。

例如链接:

  

www.site.com?val1=a&val2=b

显示为:

  

的mailto:?my@address.com主题= www.site.com VAL1 = A和VAL2 = B

这正是我想要的,但是当点击它时,它会创建一条消息:

  

受试者= www.site.com?VAL1 =一个

哪个已经放弃了&val2,这是有道理的&是mailto命令中的分隔符 所以,我尝试了其他各种方法来解决这个问题,但没有成功 我曾尝试隐含地引用subject=''部分而没有做任何事情。

我(在C#中)替换'&'使用&,Live Mail和Thunderbird只会转回:

  

www.site.com?val1=a&val2=b

我取代了'&' '%26'导致:

  

的mailto:?my@address.com主题= www.site.com VAL1 =一%26安培; VAL2 = B

在主题邮件中:

  

www.site.com?val1=a&val2=b


编辑:

为了响应URL的构建方式,这是一个很大的缩减,但它是它的要点。代替att.Value.Replace,我尝试过System.Web.HtmlUtility.URLEncode调用,这也会导致失败

HtmlAgilityPack.HtmlNodeCollection nodes =doc.DocumentNode.SelectNodes("//a[@href]");
foreach (HtmlAgilityPack.HtmlNode link in nodes)
{
  HtmlAgilityPack.HtmlAttribute att = link.Attributes["href"];
  att.Value = att.Value.Replace("&", "%26");
}

4 个答案:

答案 0 :(得分:16)

尝试 mailto:my@address.com?主题= www.site.com?val1 = a%26val2 = b

&是HTML转义码,而%26是URL转义码。因为它是一个URL,所以你需要它。

编辑:我想你是如何构建你的URL的。 不要以这种方式构建网址!在让其他任何东西解析或转义之前,您需要在其中获取%26。如果你真的必须这样做(你真的应该尽量避免),那么你应该搜索"&"而不是"&",因为此时字符串已经被HTML转义。

因此,理想情况下,您可以在HTML转义之前正确构建您的网址。如果你不能正确地做到这一点,至少要搜索正确的字符串而不是错误的字符串。 "&"是错误的。

答案 1 :(得分:1)

你不能把任何角色作为主题。您可以尝试对主题的值使用System.Web.HttpUtility.URLEncode函数...

答案 2 :(得分:0)

使用网址转义码%26是正确的方法。

遗憾的是,由于bug 8023

,这仍然无法在Android操作系统上运行

答案 3 :(得分:0)

我最终为我的案例做的是取消&

www.site.com/mytest.php?val1=a=b=c。第2和第3 =等同于www.site.com?val1=a&val2=b&val3=c

的位置

在mytest.php中,我在?上爆炸,然后再次在=上爆炸。

我知道这完全是黑客,但它对我有用。