Erstellen Sie HTML-Links aus In-Text-URLs mithilfe von Html Agility Pack

c# html-agility-pack

Frage

Wie kann ich eine URL zu HTML Link von Text mit Html Agility Pack + c # konvertieren?

Zum Beispiel: "www.stackoverflow.com ist eine sehr coole Seite."

Ausgabe:

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

Akzeptierte Antwort

Danke @ user1778606 für deine Antwort. Ich habe das funktioniert, obwohl es immer noch ein wenig Regex verwendet. Es funktioniert viel besser und sicherer (dh es wird niemals Hyperlinks innerhalb von Hyperlinks und dem href-Attribut erzeugen).

        //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;

Beliebte Antwort

Ich bin mir ziemlich sicher, dass es möglich ist, obwohl ich es nicht versucht habe.

So ersetzen Sie eine feste Zeichenfolge in einem Dokument durch Links

Schlüsselwort im Text finden, wenn das Schlüsselwort bestimmte Bedingungen erfüllt - C #

Heres, wie man für URLs regex

regulärer Ausdruck für URL

Lege diese zusammen und es sollte möglich sein.

Pseudocode

Wähle alle Textknoten aus

für jeden Knoten

Hol den inneren Text
finde URLs im Text (regex verwenden?)
für jede gefundene URL

Ersetzen Sie den Text der URL durch ein String-Literal-Link-Tag (a href = etc ...)



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum