Skip to main content
 首页 » 编程设计

c#之使用 C# 自动超链接 URL 和电子邮件,同时保留定制标签

2024年02月03日37webabcd

我有一个网站,允许用户向论坛发布消息。

目前,如果用户键入网址或电子邮件地址并发布,它会被视为与任何其他文本一样。

有一些工具可以让用户提供超链接的网站和电子邮件地址(通过一些定制的标签/标记)——这些工具有时会被使用,但并非总是如此。此外,定制的“图像”标签也可用于引用网络上托管的图像。

我的目标是既迎合那些使用这些现有工具生成超链接地址的人,又迎合那些只需输入网址或电子邮件地址,然后自动将其转换为超链接地址的人他们的地址(一旦他们提交了他们的帖子)。

我发现了一两个正则表达式可以转换纯字符串 Web 或电子邮件地址,但是,我显然不想对已经通过网站定制标记处理的地址执行任何操作,这就是我被困住了 - 如何排除已经通过定制标签满足的任何 Web 或电子邮件地址 - 我不想让它们保持原样。

以下是我需要单独放置的变体的一些定制标记示例:

[URL=www.msn.com]www.msn.com[/URL] 
 
[URL=http://www.msn.com]http://www.msn.com[/URL] 
 
[EMAIL=bob@smith.com]bob@smith.com[/EMAIL] 
 
[IMG]www.msn.com/images/test.jpg[/IMG] 
 
[IMG]http://www.msn.com/images/test.jpg[/IMG] 

然而,理想情况下,以下示例需要分别自动转换为 Web 和电子邮件链接:

www.msn.com 
 
http://www.msn.com 
 
bob@smith.com 

理想情况下,“转换后的”链接只会根据本文前面的初始示例应用适当的定制标签,而不是:

<a href="..." etc. 

他们会变成:

[URL=http://www.. etc.) 

不幸的是,我们有大量的历史数据存储在这个定制标签中,所以现在,我们想保留它而不是实现一种全新的方式来存储我们的用户帖子。

如有任何帮助,我们将不胜感激。

谢谢。

请您参考如下方法:

这是我使用的方法。我现在无法访问完整的代码库,因此看不出它与论坛代码如何配合以停止双重链接,但请尝试一下,看看它是否适合您...

/// <summary> 
    /// Turns any literal URL references in a block of text into ANCHOR html elements. 
    /// </summary> 
    public static string ActivateLinksInText(string source) 
    { 
        source = " " + source + " "; 
        // easier to convert BR's to something more neutral for now. 
        source = Regex.Replace(source, "<br>|<br />|<br/>", "\n"); 
        source = Regex.Replace(source, @"([\s])(www\..*?|http://.*?)([\s])", "$1<a href=\"$2\" target=\"_blank\">$2</a>$3"); 
        source = Regex.Replace(source, @"href=""www\.", "href=\"http://www."); 
        //source = Regex.Replace(source, "\n", "<br />"); 
        return source.Trim(); 
    }