Frage

Ich nutze die Twitter-API und möchte alle URLs in Hyperlinks umwandeln.

Was ist Ihrer Meinung nach der effektivste Weg, dies zu tun?

aus

string myString = "This is my tweet check it out http://tinyurl.com/blah";

Zu

This is my tweet check it out <a href="http://tinyurl.com/blah">http://tinyurl.com/>blah</a>
War es hilfreich?

Lösung

Reguläre Ausdrücke sind wahrscheinlich Ihr Freund für diese Art von Aufgabe:

Regex r = new Regex(@"(https?://[^\s]+)");
myString = r.Replace(myString, "<a href=\"$1\">$1</a>");

Der reguläre Ausdruck zum Abgleichen von URLs erfordert möglicherweise etwas Arbeit.

Andere Tipps

Ich habe genau das Gleiche damit gemacht jquery verbraucht die JSON-API Hier ist die Linkify-Funktion:

String.prototype.linkify = function() {
    return this.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/, function(m) {
        return m.link(m);
    });
 };

Das ist tatsächlich ein hässliches Problem.URLs können Satzzeichen enthalten (und damit enden). Daher kann es schwierig sein, zu bestimmen, wo eine URL tatsächlich endet, wenn sie in normalen Text eingebettet ist.Zum Beispiel:

http://example.com/.

ist eine gültige URL, könnte aber genauso gut das Ende eines Satzes sein:

I buy all my witty T-shirts from http://example.com/.

Sie können nicht einfach analysieren, bis ein Leerzeichen gefunden wird, da Sie dann den Punkt als Teil der URL behalten.Sie können auch nicht einfach analysieren, bis ein Punkt oder ein Leerzeichen gefunden wird, da Punkte in URLs sehr häufig vorkommen.

Ja, Regex ist hier Ihr Freund, aber die Erstellung des passenden Regex ist der schwierige Teil.

Schauen Sie sich auch das an: Erweitern von URLs mit Regex in .NET.

Sie können dies etwas mehr steuern, indem Sie die MatchEvaluator-Delegatenfunktion mit regulärem Ausdruck verwenden:Angenommen, ich habe diese Zeichenfolge:

find more on http://www.stackoverflow.com 

Probieren Sie jetzt diesen Code aus

private void ModifyString()
{
    string input = "find more on http://www.authorcode.com ";
                Regex regx = new Regex(@"\b((http|https|ftp|mailto)://)?(www.)+[\w-]+(/[\w- ./?%&=]*)?");
                string result = regx.Replace(input, new MatchEvaluator(ReplaceURl));
}

static string ReplaceURl(Match m)
{
    string x = m.ToString();
    x = "< a href=\"" + x + "\">" + x + "</a>";
    return x;
}

/jubelt RedWolves zu

aus:this.replace(/[A-Za-z]+://[A-Za-z0-9-]+.[A-Za-z0-9-:%&\?/.=]+/, function(m){...

sehen:/[A-Za-z]+://[A-Za-z0-9-]+.[A-Za-z0-9-:%&\?/.=]+/

Es gibt den Code für die Adressen „anyprotocol“://“anysubdomain/domain“. „anydomainextension and address“,

und es ist ein perfektes Beispiel für andere Anwendungen der String-Manipulation.Mit .replace können Sie nach Belieben schneiden und würfeln und bei Bedarf die richtigen „a href“s einfügen.

Ich habe jQuery verwendet, um die Attribute dieser Links in meiner Logik zum Laden von Inhalten einfach in „target=_blank“ zu ändern, obwohl Sie sie mit der .link-Methode nicht anpassen können.

Ich persönlich liebe es, eine benutzerdefinierte Methode an das String-Objekt anzuhängen, um Strings im Handumdrehen zu filtern (die String.prototype.linkify-Deklaration), aber ich bin mir nicht sicher, wie sich das in einer großen Umgebung auswirken würde, in der Sie es tun würden Sie müssen mehr als 10 benutzerdefinierte Linkify-ähnliche Funktionen organisieren.Ich denke, an diesem Punkt müssten Sie definitiv etwas anderes mit Ihrer Codestruktur machen.

Vielleicht stolpert hier ein Tierarzt vorbei und klärt uns auf.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top