我有一个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.如果你不能正确地做到这一点,至少要搜索正确的字符串而不是错误的字符串."&"是错的.