我有一个网站,允许用户向论坛发布消息。
目前,如果用户键入网址或电子邮件地址并发布,它会被视为与任何其他文本一样。
有一些工具可以让用户提供超链接的网站和电子邮件地址(通过一些定制的标签/标记)——这些工具有时会被使用,但并非总是如此。此外,定制的“图像”标签也可用于引用网络上托管的图像。
我的目标是既迎合那些使用这些现有工具生成超链接地址的人,又迎合那些只需输入网址或电子邮件地址,然后自动将其转换为超链接地址的人他们的地址(一旦他们提交了他们的帖子)。
我发现了一两个正则表达式可以转换纯字符串 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();
}
关于c# - 使用 C# 自动超链接 URL 和电子邮件,同时保留定制标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3037623/