代码之家  ›  专栏  ›  技术社区  ›  Serapth

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

  •  8
  • Serapth  · 技术社区  · 15 年前

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

    例如,如果我有这样的链接:

    www.

    它被改写为:

    邮箱:my@address.com?主题=www.site.com

    这非常好地工作,直到我遇到带有和号的URL,这会导致主题被截断。

    例如,链接:

    www.val1=A&val2=B

    表现为:

    邮箱:my@address.com?主题=www.site.com?val1=A&val2=B

    这正是我想要的,但单击后,它会创建一条消息,其中包含:

    主题=www.site.com?Val1=

    它把 &val2 ,这很有意义,因为&是mailto命令中的分隔符。
    所以,我试过其他各种方法来解决这个问题,但都没有成功。
    我试图暗中引用 subject='' 一点作用也没有。

    i(在c中)将“&”替换为 & 现场邮件和雷鸟会变成:

    www.val1=A&val2=B

    我将“&”替换为“%26”,结果是:

    邮箱:my@address.com?主题=www.site.com?val1=a%26amp;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 回复  |  直到 12 年前
        1
  •  16
  •   Welbog    15 年前

    尝试 邮箱:my@address.com?主题=www.site.com?Val1=一% 26Val2= b

    & 是HTML转义代码,而 %26 是URL转义码。既然它是一个网址,那就是你所需要的。

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

    所以,理想情况下,在HTML被转义之前,您可以正确地构建您的URL。如果你做不好,至少要搜索正确的字符串而不是错误的字符串。 “&” 是错误的。

        2
  •  1
  •   Lucas    15 年前

    你不能把任何角色作为主题。您可以尝试对主题的值使用system.web.httputility.urlencode函数…

        3
  •  0
  •   T.Rob    12 年前

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

    遗憾的是,由于 bug 8023

        4
  •  0
  •   Mihai Iorga Lykers    12 年前

    我为我的案子所做的就是 & .

    www.site.com/mytest.php?val1=a=b=c . 第二和第三个 = 相当于 www.site.com?val1=a&val2=b&val3=c

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

    我知道这完全是个骗局,但它确实对我有用。