使用Html敏捷包从文本url创建Html链接

本文关键字:Html url 创建 链接 文本 使用 | 更新日期: 2023-09-27 18:05:09

如何使用html敏捷包+ c#将url从文本转换为html链接?

例如:"www.stackoverflow.com是一个非常酷的网站。"

输出:

"<a href="www.stackoverflow.com">www.stackoverflow.com</a>  is a very cool site."

使用Html敏捷包从文本url创建Html链接

感谢@user1778606的回答。我得到了这个工作,虽然它仍然使用一点正则表达式。它工作得更好更安全(也就是说,它永远不会在超链接和href属性中创建超链接)。

        //convert text to html
        HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
        doc.LoadHtml(inputString);
        // 'w* - means it can start with any alphanumeric charactar
        // 's+ - was placed to replace all white spaces (when there is more than one word).
        // 'b - set bounderies for the keyword
        const string pattern = @"((([A-Za-z]{3,9}:(?:'/'/)?)(?:[-;:&='+'$,'w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&='+'$,'w]+@)[A-Za-z0-9.-]+)((?:'/['+~%'/.'w-_]*)?'??(?:[-'+=&;%@.'w_]*)#?(?:[.'!'/''w]*))?)";
        //get all elements text propery except for anchor element 
        var nodes = doc.DocumentNode.SelectNodes("//text()[not(ancestor::a)]") ?? new HtmlAgilityPack.HtmlNodeCollection(null);
        foreach (var node in nodes)
        {
            Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
            node.InnerHtml = regex.Replace(node.InnerHtml, "<a href='"$1'">$1</a>").Replace("href='"www", "href='"http://www");
        }
        return doc.DocumentNode.OuterHtml;

我很确定这是可能的,虽然我还没有尝试过。

下面是如何将文档中的固定字符串替换为链接

当关键字匹配某些条件时在文本中查找关键字- c#

如何正则化url

url 的正则表达式

把这些放在一起,应该是可能的。

伪代码

选择所有文本节点

每个节点 的

获取内部文本
在文本中查找url(使用正则表达式?)
对于找到的每个url

将url的文本替换为字符串文本链接标签(a href = etc…)