使用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."
感谢@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…)