Html Agility Pack + c# を使用して、URL をテキストから HTML リンクに変換するにはどうすればよいですか?
例: 「www.stackoverflow.com はとてもクールなサイトです。」
出力:
"<a href="www.stackoverflow.com">www.stackoverflow.com</a> is a very cool site."
Html Agility Pack + 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;
私はそれを試みていませんが、私はそれが可能であると確信しています。
ドキュメント内の固定文字列をリンクに置き換える方法は次のとおりです
URLを正規表現する方法は次のとおりです
それらを組み合わせると、それが可能になるはずです。
疑似コード
すべてのテキスト ノードを選択
ノードごとに
内部テキストを取得する 見つかった各 URL について
、テキスト内の URL を検索します (正規表現を使用しますか?)URL のテキストを文字列リテラル リンク タグ (a href = など ...) に置き換えます。