如何正确编码ASP.NET MVC中的MailTo链接?

 LDP-liu 发布于 2023-02-08 17:52

我在ASP.NET MVC 5应用程序上有以下mailto链接:


  share by email

这不是在HTML Validator上验证.我收到错误:

错误值mailto:?subject =主题&body =这是url:%0D%0Ahttp:// localhost:8580/home表示元素a上的属性href:查询组件中的空格.使用%20代替空格.

我尝试使用编码,HttpUtility.UrlEncode但是当我打开电子邮件时,我会在主题和正文中得到"+"符号和其他人,我无法解决这个问题.

2 个回答
  • 您需要使用HttpUtility.UrlPathEncode而不是HttpUtility.UrlEncode:

    <a rel="nofollow" href="@(
      (String.Format("mailto:?subject={0}&body={1}", 
        HttpUtility.UrlPathEncode("The subject line"), 
        HttpUtility.UrlPathEncode("The body") + "%0D%0A" + "http://theurl.xyz"))))">
      share by email
    </a>
    

    注意:您需要HttpUtility.UrlPathEncode单独使用这些部件,并且不能将HttpUtility.UrlPathEncode整个部件放在一起,String.Format因为特殊HttpUtility.UrlPathEncode处理?并且只对文本进行编码?.

    来自MSDN:

    您可以使用UrlEncode方法或UrlPathEncode方法对URL进行编码.但是,这些方法会返回不同的结果.UrlEncode方法将每个空格字符转换为加号字符(+).UrlPathEncode方法将每个空格字符转换为字符串"%20",该字符串表示十六进制表示法的空格.

    2023-02-08 17:56 回答
  • 我知道这有点旧,但当我试图找出编码mailto链接的最佳方法时,我遇到了这个问题.我发现最好的方法是使用Uri.EscapeDataString每个参数,然后使用HttpUtility.HtmlAttributeEncode对整个属性进行编码:

    HttpUtility.HtmlAttributeEncode(
        String.Format("mailto:?subject={0}&body={1}", 
            Uri.EscapeDataString(subject), 
            Uri.EscapeDataString(body)))
    

    HttpUtility.UrlEncode并且HttpUtility.UrlEncodeUnicode没有正确编码空格 - 它们变成加号("+"),然后在主题行/正文/等中显示为加号.HttpUtility.UrlPathEncode似乎解决了这个问题,但没有正确编码其他字符,如?,#和/.Uri.EscapedDataString似乎是唯一正确编码所有这些字符的方法.我想Uri.HexEscape也会同样有效,但看起来可能有点矫枉过正.

    警告:我甚至没有对各种各样的浏览器和电子邮件客户端进行测试

    2023-02-08 17:56 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有