在我的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,但得到?而不是£符号。
答案 0 :(得分:3)
您不会找到任何解决所有浏览器/电子邮件客户端此问题的答案。使用Matt Fellows建议的£
可能适用于此实例中的某些客户端。但是,您将遇到其他没有命名html实体的字符或者没有正确处理实体的浏览器/电子邮件客户端的问题。
更令人讨厌的是,如果您针对一个浏览器/电子邮件设置(例如使用Windows-1252)进行更正,则可能会使用UTF-8破坏客户端。
最后,唯一真正的解决方案是浏览器和电子邮件客户端升级到使用UTF-8,请参阅Avoiding an international mailto maelstrom。
答案 1 :(得分:2)
尝试刻意编码为£
public static HtmlString EncodeMailTo(this HtmlHelper hlp, string val)
{
var encoded = HttpUtility.UrlEncode(val).Replace("+", "%20").Replace("%C2%A3", "£");
return new HtmlString(encoded);
}
£符号不是基本ASCII字符集的一部分。所以ASCII不会正确解释它。
答案 2 :(得分:0)
Matt Fellow的回答增强+1
var encoded = HttpUtility.UrlEncode(HttpUtility.HtmlEncode(val));