【问题标题】:Replace mailto-links替换邮件链接
【发布时间】:2012-07-01 11:07:02
【问题描述】:

我有这个示例字符串:

var content = "Lorem ipsum dolor sit amet <a href=\"mailto:info@xxx.com\">info@xxx.com</a> ipsum dolor <a href=\"mailto:info@yyy.eu\">info@yyy.eu</a> adipiscing elit.";

当字符串包含邮件链接时,我想替换(操作)所有出现的 a-tag。

锚点在操作后应该是这样的:

<a href="#" title="protected">in..@xxx.com</a>

内容字符串可以包含任意数量的邮件链接。

我怎样才能最好地完成这项任务?

【问题讨论】:

  • Regex 将成为您的朋友。这已经在 Stackoverflow 上多次介绍过,所以不要对它关闭感到惊讶。
  • 好的,你有帖子涵盖这个问题吗?如果是这样,我会很高兴阅读它。 ;-)
  • 此线程中的第二个答案可能会有所帮助 - stackoverflow.com/questions/4718933/…

标签: c# html


【解决方案1】:

如果你有 XHTML,那么就像 Chuck 展示的那样使用 XElement。

如果不是,那么正则表达式就是要走的路。比如:

Regex find = new Regex("<a\\b[^>]*href=['\"]mailto:(.*?)['\"]", RegexOptions.Singleline | RegexOptions.IgnoreCase);

警告,我没有测试上面的代码,但我 99% 确定它是正确的。另外,我可能错过了电子邮件地址中的 > 等特殊情况。

【讨论】:

    【解决方案2】:

    将内容转换为 XML,然后只需搜索包含以 mailto: 开头的 hrefa 标记

    你需要这个来使用 XPath:using System.Xml.XPath;

    var content = "Lorem ipsum dolor sit amet <a href=\"mailto:info@xxx.com\">info@xxx.com</a> ipsum dolor <a href=\"mailto:info@yyy.eu\">info@yyy.eu</a> adipiscing elit.";
    
    XElement x = XElement.Parse(string.Format("<root>{0}</root>", content));
    var hrefs = x.XPathSelectElements("a[starts-with(@href, 'mailto:')]");
    foreach (XElement href in hrefs)
    {
        href.Attribute("href").Value = "#";
        href.Add(new XAttribute("title", "protected"));
    
        string email = href.Value;
        int at = email.IndexOf('@');
        if(at > 0)
        {
            string username = email.Substring(0, at);
            string domain = email.Substring(at);
            if (username.Length > 2)
                href.Value = string.Format("{0}..{1}", 
                    username.Substring(0, 2), domain);
        }
    }
    string result = string.Concat(x.Nodes().ToArray());
    

    【讨论】:

      猜你喜欢
      • 2012-05-09
      • 2019-03-22
      • 2013-01-28
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-12
      • 2014-09-20
      相关资源
      最近更新 更多