我有一个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");
}
答案 0 :(得分:16)
尝试 mailto:my@address.com?主题= www.site.com?val1 = a%26val2 = b
&
是HTML转义码,而%26
是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中,我在?
上爆炸,然后再次在=
上爆炸。
我知道这完全是黑客,但它对我有用。