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

Ser*_*pth 8 c# email

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

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

www.site.com

它被重写为:

邮寄地址:my@address.com主题= www.site.com

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

例如链接:

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

显示为:

邮寄地址:??my@address.com主题= www.site.com VAL1 = A值2 = B

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

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

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

我(在C#中)替换&Live &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");
}
Run Code Online (Sandbox Code Playgroud)

Wel*_*bog 16

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

&是一个HTML转义码,而是%26一个URL转义码.由于它是一个URL,这就是你所需要的.

编辑:我想你是如何构建你的URL.不要那样构建URL!%26在你让任何其他东西解析或逃避它之前,你需要进入那里.如果你真的必须这样做(你真的应该尽量避免),那么你应该搜索"&"而不仅仅是"&"因为此时字符串已经被HTML转义了.

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