mailto中的磅符号问题:链接

时间:2011-10-13 09:05:52

标签: html asp.net-mvc encoding mailto

在我的ASP.NET MVC应用程序中,我创建了一个mailto链接,其中主题和正文包含一个英镑符号。

这似乎适用于大多数情况,但是一些使用Outlook 2003 / Chrome的用户报告说,当点击链接时,井号符号显示为£,在我看来它正在解释UTF-8字符串如ascii / windows-1252 /等等。

我不确定我该怎么编码。目前我正在使用以下内容:

public static HtmlString EncodeMailTo(this HtmlHelper hlp, string val)
{
  var encoded = HttpUtility.UrlEncode(val).Replace("+", "%20");
  return new HtmlString(encoded);
}

并在视图中:

<a href="mailto:?subject=@(Html.EncodeMailTo(Model.Offer.Heading))&body=@(Html.EncodeMailTo(Model.Offer.Requirement))" >
    Link
</a>

有没有办法可以在UrlEncoding之前将其转换为不同的编码(例如Windows-1252)?我已经尝试转换字符串的编码,然后传递这个和使用的编码到UrlEncode,但得到?而不是£符号。

3 个答案:

答案 0 :(得分:3)

您不会找到任何解决所有浏览器/电子邮件客户端此问题的答案。使用Matt Fellows建议的&pound;可能适用于此实例中的某些客户端。但是,您将遇到其他没有命名html实体的字符或者没有正确处理实体的浏览器/电子邮件客户端的问题。

更令人讨厌的是,如果您针对一个浏览器/电子邮件设置(例如使用Windows-1252)进行更正,则可能会使用UTF-8破坏客户端。

最后,唯一真正的解决方案是浏览器和电子邮件客户端升级到使用UTF-8,请参阅Avoiding an international mailto maelstrom

答案 1 :(得分:2)

尝试刻意编码为&pound;

public static HtmlString EncodeMailTo(this HtmlHelper hlp, string val)
{
  var encoded = HttpUtility.UrlEncode(val).Replace("+", "%20").Replace("%C2%A3", "&pound;");

  return new HtmlString(encoded);
}

£符号不是基本ASCII字符集的一部分。所以ASCII不会正确解释它。

答案 2 :(得分:0)

Matt Fellow的回答增强+1

var encoded = HttpUtility.UrlEncode(HttpUtility.HtmlEncode(val));